删除循环中的内存泄漏

时间:2011-06-17 10:08:56

标签: c++ memory-leaks delete-operator

“由于删除循环中出现逻辑错误,最终会出现内存泄漏。”

我的朋友说了这个,我没有看到。

for(int i=0; i<nrOfAvailableSeats; i++)
{
    delete passengers[i];
}
delete [] passengers;

4 个答案:

答案 0 :(得分:4)

首先将nrOfAvailableSeats设置为初始值(100),然后通过程序运行时它可能会减少(因为你已经

nrOfAvailableSeats--;

在你的代码中)所以当你在循环中使用它时,你不会delete一些对象。

至少你必须定义一个全局常量:

const int PlaneCapacity = 100;

并使用它来初始化nrOfAvailableSeats以及数组创建和删除循环。

答案 1 :(得分:2)

这是因为您在删除仅部分元素后删除了一组乘客。 因此,当您执行delete [] passengers;某些([i],[i + 1],...)元素时,可能会取消删除。

答案 2 :(得分:0)

在链接文件中有代码:nrOfAvailableSeats--;

当您释放数据时,您的移民有memleak,因为nrOfAvailableSeats可以&lt; 100

答案 3 :(得分:0)

您将所有可用席位初始化为0 / null,因此,在清理阶段,只需遍历所有100个元素并删除每个项目。 (编辑:在删除之前检查空指针是多余的,没关系。)

如果允许使用STL,也可以使用std :: vector。 然后只需迭代向量并将它们全部删除,因为在实际使用它们时,向量中只有很多项。 (如果你只使用push和pop)。

要从正在使用的向量中删除某些内容(不要完全清空),请将要删除的项目与vector.back()交换,然后删除vector.back(),然后{{1 }}。 注意:这会使任何迭代器无效,您必须正确地重新分配它们,或者只有一个您希望删除的项目,只需通过pop_back()或{{1}突破迭代循环}。

break