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

C语言有序链表插入值10失败且程序运行后无输出是什么原因?

问题诱因

你代码的核心问题出在InsertingInSortedList函数的while循环判断条件顺序错误,触发了空指针非法访问:

  • C语言的&&逻辑与运算符遵循短路求值规则,你当前写的判断顺序是while(p->data < value && p),程序会优先执行p->data < value的判断,再校验p是否为非空指针。
  • 当插入数值10时,10大于链表中所有已有元素,循环会持续遍历到p变为NULL,此时再执行p->data属于访问空指针的非法操作,会直接触发段错误导致程序崩溃退出,因此没有任何输出。
修复方法

仅需要调换while循环的两个判断顺序,先校验指针有效性再访问成员即可:

// 修改前
// while(p->data < value && p)
// 修改后
while(p && p->data < value)

修改后程序会先判断p是否非空,当p为NULL时直接终止循环,不会再执行非法的指针访问,此时j指向链表最后一个节点,temp节点可以正常挂载到链表末尾,Print函数会正常输出1 3 5 7 8 9 10 。

内容的提问来源于stack exchange,提问作者John Lim

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 16:51:01