我有一个结构定义如下:
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/