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