尝试在C ++中删除对象时内存泄漏

时间:2017-04-01 15:44:39

标签: c++ arrays function memory-leaks

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

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

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

1 个答案:

答案 0 :(得分:1)

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

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

之前

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