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