我有一个动态分配的数组,我试图从中删除一个选定的对象。但我最终导致内存泄漏。 数组:
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;
}
“竞争者”类是一个抽象基类。 为什么我最终会出现内存泄漏?
答案 0 :(得分:1)
通过创建不包含Competitor*
的新数组从数组中删除Competitor*
后,您很可能需要delete
Competitor *
。
在delete[] person;
添加delete person[find(name)];
如果你真的想要偷偷摸摸,请在顶部found = find(name);
使用found
,而不是一遍又一遍地重新找到名字。