【问题标题】:Freeing allocated space after deleting a node in a Linked List删除链表中的节点后释放分配的空间
【发布时间】:2016-03-07 21:06:20
【问题描述】:

我正在为大学课程学习book 中的链表。我在删除链表中的节点时遇到问题。列表的给定结构是

struct Node {
int item;
Node *next;
}

在本书的部分中,正在演示使用两个指针删除节点:prev 和 cur(其中 cur 指向要删除的节点)。

将prev重新路由到cur之后的节点:

prev->next = cur->next;

我们继续释放用于当前节点的内存。我的问题是这部分,使用的代码是:

cur->next = NULL;
delete cur;
cur = NULL;

第一行和第三行不是多余的吗?还是我缺少什么?因为我们像在第二行中那样删除 cur 那么我们不需要先设置 cur->next= null 对吗?

在书中它给出了explanation,但它没有多大意义。有什么帮助吗?

【问题讨论】:

  • 很多书都不是很好,很遗憾。
  • 是的,你是对的。将cur 设置为空可能如果您保留指针以供以后使用。否则不行。将 next 设置为 null 是没有用的。
  • @molbdnilo:它不是防御性的!设置cur->next 设置一个值,其访问在下一行开始时变为未定义。如果有什么应该设置已删除内存的内容,那将是 [debugging] operator delete。将cur设置为NULL是否合理,取决于是否继续使用。如果它只是一个在下一行超出范围的局部变量,它仍然没有意义。
  • 如果造成如此多的 FUD,那所谓的“防御性编程”又有什么意义呢?与在下一行中读取内容之前对缓冲区进行货物崇拜归零相同。新手看到这样的垃圾,完全不知所措。
  • @MartinJames 并在new Socket(...) 之后立即测试一个套接字是否为空,并测试它是否已连接,如果不是,它会抛出异常。 ...

标签: c++ linked-list


【解决方案1】:

显然是的,第一行和第三行是多余的

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-31
    • 2013-07-23
    相关资源
    最近更新 更多