尝试删除C++中的对象时发生内存泄露
问题描述:
我有一个动态分配的数组,我试图从中删除一个选定的对象。但我最终会发生内存泄漏。 阵列:尝试删除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是一个抽象的基类。 为什么最终导致内存泄漏?
答
通过创建一个不包含Competitor*
的新阵列从阵列中删除Competitor*
后,您很可能需要delete
Competitor *
。
delete[] person;
前添加delete person[find(name)];
如果你真的想偷偷摸摸,在最顶端found = find(name);
和反复使用found
不是重新寻找名字。
+0
谢谢!这工作,但你是对的。我过于复杂了。代码现在更短,没有泄漏。 – Henke
你已经过分复杂了。您可以通过保留现有阵列,找到要移除的人员的位置以及将人员移出阵列中的一个插槽后移动所有人来节省大量工作量。 – user4581301
由于它看起来像您正在存储指向竞争者的指针,您可能需要删除已删除的人员以及旧数组。 – user4581301