刚刚学习 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 个这些条目,但删除后堆不会减少。 那么你能告诉我我的错误在哪里吗?
最佳答案
如果您想了解程序的堆使用情况,以确保正确使用 malloc/free 和 new/delete,那么您应该使用像 Valgrind 这样的应用程序级工具 Memcheck .
系统级工具一般会报告为堆保留的虚拟内存量,不一定全部提交。为堆保留的虚拟内存会在应用程序的生命周期内增加,只会在运行时决定压缩它时随心所欲地定期减少。
关于c++ - 指向结构和删除的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20135419/