Выделение вектора указателей, но память все еще используется - PullRequest
2 голосов
/ 27 декабря 2010

Понятия не имею, что не так со следующим кодом!Я удаляю все указатели, но когда я использую команду «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 ]

5 голосов
/ 27 декабря 2010

В этом коде нет утечки (при условии, что нет исключений, возникающих после нанесения покрытия и до освобождения).Причина, по которой вы не видите, что память падает, заключается в том, что ЭЛТ может не освободить память, которую вы delete немедленно вернули к процессу.Это может сохранить его для будущего использования.Тем не менее, гарантируется, что память будет освобождена после завершения процесса.

0 голосов
/ 27 декабря 2010

Как сказал Навин, в коде нет утечки.Но то, как вы пишете цикл, не рекомендуется.Вы могли бы легко использовать for_each () для удаления памяти. см. Этот вопрос в SO

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...