繁体   English   中英

链接列表示例中的指针

[英]Pointers in a linked list example

我一直在执行一个链表,直到遇到

void StringLinkedList::removeFront(){ 

StringNode *old = head;
head = old -> next;
delete old;

}

我想知道为什么不只是head = head-> next(而不是head = old-> next),当什么都没有指向前一个地址时,这怎么会造成内存泄漏(因为head现在head节点指向的是下一个节点)。

非常感谢。

C ++没有像其他一些语言一样自动进行垃圾回收的功能,一旦不再引用存储,它就会释放存储。 造成这种情况的原因有很多,关于这一主题的讨论可以在“ 为什么C ++没有垃圾收集器?”中找到。

这意味着必须delete new否则可能会泄漏。

说你有

在此处输入图片说明

如果您没有在覆盖head之前delete head的原始值,

在此处输入图片说明

不再知道节点1的地址,几乎无法跟踪以delete该分配。 这迫使泄漏。

但是,如果您在重新指向delete head之前将其delete head

在此处输入图片说明

您无法head->next来查找下一个节点,从而丢失并泄漏了整个列表。

但是,如果您复制head的地址的临时副本,

在此处输入图片说明

old在这种情况下,您可以安全地重新指向head

在此处输入图片说明

并且仍然将需要delete的分配地址存储在old

暂无
暂无

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

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