指向struct和delete的指针

时间:2013-11-22 01:40:53

标签: c++ pointers struct

学习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个这些条目,但删除后堆不会减少。 那么请你告诉我我的错误在哪里?

1 个答案:

答案 0 :(得分:1)

如果你想了解你的程序的堆使用情况,关于确保你正确使用malloc / free和new / delete,那么你应该使用像Valgrind Memcheck这样的应用程序级工具。

系统级工具通常会报告为堆保留的虚拟内存量,这些内容并非都必须提交。为堆保留的虚拟内存将在应用程序的生命周期内增加,只有在确定压缩它时才会在运行时突发奇想时周期性地减少。