“由于删除循环中出现逻辑错误,最终会出现内存泄漏。”
我的朋友说了这个,我没有看到。
for(int i=0; i<nrOfAvailableSeats; i++)
{
delete passengers[i];
}
delete [] passengers;
答案 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