释放指针向量,但内存仍在使用中

时间:2010-12-27 08:54:15

标签: c++ pointers memory-management vector

我不知道以下代码有什么问题!我正在删除所有指针,但是当我使用“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;
}

2 个答案:

答案 0 :(得分:5)

此代码中没有泄漏(假设在allcoation之后和解除分配之前没有抛出异常)。您没有看到内存中断的原因是CRT可能无法释放您delete立即返回进程的内存。它可能会保留以备将来使用。但是,一旦进程终止,就可以保证释放内存。

答案 1 :(得分:0)

正如Naveen所说,代码中没有泄漏。但是,不建议您编写循环的方式。您可以轻松使用for_each()来删除内存。 refer to this question in SO