学习C ++并尝试正确理解指针,新内容和删除内容。 关于我的问题: 我创建一些指向结构的指针,最后我删除它们。但堆大小不会减少。 我搜索了一些答案并找到了以下问题。C++ delete does not free all memory (Windows)。答案中的代码似乎正确地释放了堆。
我的愚蠢学习代码:
#include <iostream>
using namespace std;
struct daten
{
int iVal;
daten *next;
daten *prev;
};
int main()
{
daten *first=nullptr;
daten *prev=nullptr;
daten *entry=nullptr;
daten *last=nullptr;
cout << "[Any Key] FILL";
getchar();
//fill
for( int i=0;i<100000;i++)
{
if(!entry)
{
entry=new daten;
entry->iVal=i;
entry->next=nullptr;
entry->prev=nullptr;
first=entry;
prev=entry;
last=entry;
}
else
{
entry=new daten;
entry->iVal=i;
entry->next=nullptr;
entry->prev=prev;
prev->next=entry;
prev=entry;
last=entry;
}
}
cout << "[Any Key] DELETE";
getchar();
//delete
prev=last;
while(prev)
{
last=prev;
prev=prev->prev;
delete last;
last=nullptr;
}
cout << "[Any Key] END";
getchar();
}
我有一个更复杂的代码,我可以插入/删除/导航为链接列表,只是为了确保我创建了100000个这些条目,但删除后堆不会减少。 那么请你告诉我我的错误在哪里?
答案 0 :(得分:1)
如果你想了解你的程序的堆使用情况,关于确保你正确使用malloc / free和new / delete,那么你应该使用像Valgrind Memcheck这样的应用程序级工具。
系统级工具通常会报告为堆保留的虚拟内存量,这些内容并非都必须提交。为堆保留的虚拟内存将在应用程序的生命周期内增加,只有在确定压缩它时才会在运行时突发奇想时周期性地减少。