繁体   English   中英

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

[英]C++ - Memory Leak - Pointers to Struct

我有一个结构定义如下:

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

我在许多功能中使用它。 例如, print接收到一个指向struct( 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;

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

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

在您不需要新的或删除的情况下,您使用的是指针来索引链接列表。

Edge *e = root;

这将创建一个指向根节点指向的节点的指针,e和根都指向同一对象。

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

遍历链接列表非常好。

顺便说一句,这对于教育目的是可以的,在生产代码中,我宁愿建议使用STL和std :: list。

当您不再需要使用new创建的对象时, 必须使用delete结束其生命周期。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM