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
相关产品推荐
相关产品推荐

