Нераспределенный вектор указателей, но память все еще используется

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

Решение

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

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

Другие вопросы по тегам