我有一個動態分配的數組,我試圖從中刪除一個選定的對象。但我最終會發生內存泄漏。 陣列:嘗試刪除C++中的對象時發生內存泄露
Competitor* *person;
被分配:
person = new Competitor*[capacity];
for (int i = 0; i < this->capacity; i++) {
person[i] = nullptr;
}
這是我的去除功能:
bool Handler::removeCompetitor(string name) {
bool removed = false;
if (find(name) != -1) {
Competitor* *temp = new Competitor*[capacity];
int j = 0;
for (int i = 0; i < nrOfCompetitors; i++) {
if (person[i] != person[find(name)]) {
temp[j] = person[i];
j++;
}
}
delete[] person;
nrOfCompetitors -= 1;
person = temp;
removed = true;
}
return removed;
}
這是我的查找功能:
int Handler::find(string name) const {
int found = -1;
for (int i = 0; i < nrOfCompetitors; i++) {
if (person[i]->getName() == name) {
found = i;
}
}
return found;
}
類「競爭對手」i是一個抽象的基類。 爲什麼最終導致內存泄漏?
你已經過分複雜了。您可以通過保留現有陣列,找到要移除的人員的位置以及將人員移出陣列中的一個插槽後移動所有人來節省大量工作量。 – user4581301
由於它看起來像您正在存儲指向競爭者的指針,您可能需要刪除已刪除的人員以及舊數組。 – user4581301