C++ - 内存泄漏 - 指向结构的指针

标签 c++ pointers memory-leaks struct

我有一个结构定义如下:

typedef struct Edge {
  ...
  struct Edge *next;      // linked list
} Edge;

我在许多功能中使用它。例如,print 接收到一个指向结构 (root) 的指针。在函数中,我需要初始化一个指向 root 的新指针(并在 while 循环中使用它来遍历链表)。我不明白内存泄漏在 C++ 中是如何工作的。

如果我执行以下操作:

Edge *e = root;

然后在 while 循环中使用 e :

while (e != NULL) {
   // do stuff
   e = e->next;
}

我必须释放指针 e 吗?因为它指向一个我想保留的结构,所以我不删除它?或者我应该那样使用它吗?

void print(Edge* root)
  ...
  Edge *e = new Edge;
  e = root;
  ...

  /* Free e */
  delete e;

最佳答案

听起来您对什么是指针及其与分配/释放内存的关系感到困惑。您可以有任意数量的指针指向一 block 内存,但内存应该只被释放一次。

在这里,您将 Edge* 传递给 print 以了解从哪里开始打印。您声明的本地 Edge* 不需要为其分配堆内存,因为 e 仅用于指向链表的不同元素,不跟踪链表的生命周期。

关于C++ - 内存泄漏 - 指向结构的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21471130/

相关文章:

c++ - 外部变量是否初始化为其默认值?

C++ Hello World 不显示输出

c++ - 通过函数初始化变量

swift - 为什么在使用 ARSCNView 关闭 ViewController 时 UI 会卡住?

c++ - 从基指针/引用调用正确的自由函数

Linux下Visual Studio与gcc的C++兼容性

c++ - 允许通过子集的迭代和随机选择进行更改的数据结构 (C++)

c++ - QVariant 包装指针在 QML 中变为 null

android - 位图大小超出了 Android 上的 VM 预算错误

c++ - 在 reinterpret_cast-ing 之后通过父指针调用 delete 时内存是否泄漏?