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

C++链表删除不存在节点触发段错误,Del方法逻辑问题排查

问题根因

段错误的核心原因是while循环的条件判断顺序错误:
while (curr->key != k && curr != NULL) 这个写法会先执行curr->key !=k的成员访问操作,再判断curr != NULL。当遍历到链表末尾curr已经为NULL时,程序会先尝试访问空指针的key成员,触发非法内存访问,直接出现段错误,你后续添加的空指针判断根本没有机会执行。

修复方案

只需要调换while循环的两个判断条件顺序,利用逻辑与&&的短路特性:当第一个条件curr != NULL不成立时,不会执行后面的成员访问操作:

// 修改前(错误)
while (curr->key != k && curr != NULL)
// 修改后(正确)
while (curr != NULL && curr->key != k)

调整后遍历到链表末尾时会直接退出循环,后续的if (curr == NULL)判断就能正常触发,直接返回不会出现非法访问。
额外补充:调整后的逻辑也兼容链表本身为空(head为NULL)的边界场景,空链表调用Del方法时会直接命中空指针判断返回,不会触发崩溃。

内容的提问来源于stack exchange,提问作者Arsenii Karpov

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 18:54:03