Я понятия не имею, что не так со следующим кодом! Я удаляю все указатели, но когда я использую команду «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;
}
Верх не является программой, которую вы должны использовать, чтобы определить, есть ли у вас утечки памяти. – Falmarri
Ваша память освобождена. Но память никогда не возвращается в ОС (пока процесс не завершится). Поэтому 'top' никогда не увидит, что память опустилась. –
Если у вас есть настоящая программа, которую вы подозреваете утечки (не эта игрушка). Тогда вы должны запустить valgrind против него (что должно выявить большинство ваших проблем). В качестве альтернативы вы должны написать код C++, а не C, и использовать RAII –