You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++循环链表析构时指针已设为null却判断为真是什么原因?

核心原因

你对指针的赋值逻辑和指向关系存在误解:

  1. 指针本质是存储内存地址的独立变量,Node* p = end->next;的操作只是将end->next中存储的「start节点的内存地址」复制给p,此时p和end->next是两个完全独立的指针变量,只是暂时指向同一块内存。
  2. 你执行end->next = NULL;的操作,仅修改了end结构体内部next指针本身存储的地址值,把它改成了空地址,这个操作既不会修改p存储的地址值,也不会修改start节点本身的内容,p仍然指向原来的start节点,因此p != NULL判断结果为真。
  3. 你以为「把end->next设为NULL就会让start指向空」是完全错误的:end->next只是一个指向start的指针,修改它的指向仅代表end不再指向start,不会对start节点或者其他指向start的指针产生任何影响。

析构逻辑验证

这段析构代码的设计是合理的,运行逻辑完全正常:

  • 你通过end->next = NULL把原本的循环链表从尾部打断,变成了普通的单链表,避免了遍历死循环
  • while循环从首节点开始逐个遍历删除所有节点,不会出现内存泄漏,也不会出现越界访问问题

内容的提问来源于stack exchange,提问作者James Newman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 21:06:03