链表示例中的指针

时间:2017-09-07 18:11:50

标签: c++ pointers linked-list

在我遇到

之前,我正在实施链接列表
button#payNewBeneficiary div div
button#payNewBeneficiary div
button#payNewBeneficiary h2
button#payNewBeneficiary p

我想知道为什么不只是head = head-> next(而不是head = old-> next),当没有任何东西指向前一个地址时,这会如何创建内存泄漏(从头部开头)节点现在指向下一个节点。)

非常感谢你。

1 个答案:

答案 0 :(得分:4)

C ++没有自动垃圾收集,就像其他语言一样,一旦不再引用就会释放存储。这有很多原因,可以在Why doesn't C++ have a garbage collector?中找到关于该主题的讨论。

这意味着new ed必须为delete d或您有泄漏。

说你有

enter image description here

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

enter image description here

节点1的地址不再为人所知,因此几乎无法追踪分配以便delete它。这会导致泄漏。

但如果您在重新指点之前delete head

enter image description here

你不能head->next找到下一个节点,你就会丢失并泄漏整个列表。

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

enter image description here

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

enter image description here

并且仍然拥有delete中存储的old所需的分配地址。