c++ - 指向结构和删除的指针

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

最佳答案

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

系统级工具一般会报告为堆保留的虚拟内存量,不一定全部提交。为堆保留的虚拟内存会在应用程序的生命周期内增加,只会在运行时决定压缩它时随心所欲地定期减少。

关于c++ - 指向结构和删除的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20135419/

相关文章:

c++ - 以下代码对于多线程增量计数器和打印是否是一个好的解决方案?

c - 用指针构建一个 strend 函数

c - 用于传递多维数组的函数声明

c - 解决GCC警告: "dereferencing type-punned pointer will break strict-aliasing rules" by temporary pointer

c++ - 在 C++ 构造函数中为结构数组分配存储空间

C++按字母顺序对结构 vector 进行排序

C#-like 泛型,C++ 中的模板类型约束

将变量转换为结构定义中定义的 union 类型

c++ - 通过 const 引用传递动态数组结构

c++ - OpenCV:如何传递 cv::Ptr 作为参数?