[英]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.