我不知道以下代码有什么问题!我正在删除所有指针,但是当我使用“top”命令来查看内存时,我可以看到仍有大量内存分配给程序。我在这里错过了一些东西以释放记忆吗?
#include <iostream>
#include <vector>
using namespace std;
int main()
{
vector<int*> container;
vector<int*>::iterator itr;
unsigned long long i;
for(i = 0; i < 10000000; i++)
{
int* temp = new int();
*temp = 1;
container.push_back(temp);
}
for(itr = container.begin(); itr != container.end(); itr++)
{
delete *itr;
*itr = NULL;
}
container.clear();
cout<<"\nafter clear\n";
while(1)
{
sleep(1000000);
}
return 0;
}
答案 0 :(得分:5)
此代码中没有泄漏(假设在allcoation之后和解除分配之前没有抛出异常)。您没有看到内存中断的原因是CRT可能无法释放您delete
立即返回进程的内存。它可能会保留以备将来使用。但是,一旦进程终止,就可以保证释放内存。
答案 1 :(得分:0)
正如Naveen所说,代码中没有泄漏。但是,不建议您编写循环的方式。您可以轻松使用for_each()来删除内存。 refer to this question in SO