gpt4 book ai didi

c++ - 尝试在 C++ 中删除对象时发生内存泄漏

转载 作者:行者123 更新时间:2023-11-28 05:13:08 25 4
gpt4 key购买 nike

我有一个动态分配的数组,我正试图从中删除一个选定的对象。但是我最终导致内存泄漏。数组:

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;
}

类“Competitor”是一个抽象基类。为什么我最终会出现内存泄漏?

最佳答案

通过创建一个不包含 Competitor* 的新数组从数组中删除 Competitor* 后,您很可能需要delete 竞争对手 *

delete[] person; 之前添加 delete person[find(name)];

如果你真的想偷偷摸摸,在顶部 found = find(name); 并使用 found 而不是一遍又一遍地重新查找 name。

关于c++ - 尝试在 C++ 中删除对象时发生内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43158824/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com