指向struct和删除(Pointer to struct and delete)

2019-10-19 01:27发布

刚学C ++,并试图了解指针,新的,正确删除。 关于我的问题:我创建了一些指向一个结构,并在年底我将它们删除。 但堆的大小不会降低。 我搜索了一些答案,发现以下问题。 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();
}

我有一个更复杂的代码,我可以插入/删除/导航作为一个链表和公正,以确保我创建这些条目10万,但删除后,堆不降低。 所以,可以请你告诉我,是我的错?

Answer 1:

如果你想了解你的程序的堆使用情况,相对于为确保您使用的malloc /免费新/删除正确的,那么你应该使用像Valgrind的应用程序级的工具MEMCHECK 。

系统级工具通常会报告已预留堆,这是不一定都致力于虚拟内存量。 为堆的应用程序的生命周期内将增加保留的虚拟存储器,仅周期性被在运行时的兴致,当它决定了压缩它降低。



文章来源: Pointer to struct and delete