指向结构和删除的指针

Pointer to struct and delete

本文关键字:指针 删除 结构      更新时间:2023-10-16

只是学习C++并尝试正确理解指针、new和delete。关于我的问题:我创建了一些指向结构的指针,最后我删除了它们。但是堆大小并没有减少。我搜索了一些答案,发现了以下问题。C++删除不会释放所有内存(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这样的应用程序级工具。

系统级工具通常会报告为堆保留的虚拟内存量,这些虚拟内存并不一定全部提交。为堆保留的虚拟内存在应用程序的生命周期内会增加,只有在运行时决定压缩时才会周期性地减少。