Linked List插入函数单列表使用正常 多列表调用触发Segmentation Fault
问题排查与修复方案
错误根因
- C语言中未初始化的局部栈变量值是不确定的,你在main中声明的
LL *head1, *head2;本质是野指针,而非你预期的空值NULL。 - 仅测试单个链表时,大概率对应栈空间的残留值刚好为0(即NULL),insert函数可以正常执行;同时声明两个头指针时,第二个指针的初始值通常为非法内存地址,insert函数判断
if(!head)不成立,直接访问head->next就会触发段错误。
修复方案
修改main函数中头指针的声明,手动初始化为NULL即可解决问题:
LL *head1 = NULL, *head2 = NULL;
代码优化建议
你实现的insert函数存在冗余逻辑,else if(!head->next)分支的逻辑已经被后续的while循环完全覆盖,可以直接去掉简化代码:
LL *insert(LL *head, int item) { if(!head) return makeNode(item); LL *tmp = head; while(tmp->next) tmp = tmp->next; tmp->next = makeNode(item); return head; }
额外提示:生产环境使用malloc时建议增加返回值校验,避免内存分配失败导致后续空指针访问。
内容的提问来源于stack exchange,提问作者Mithran Kesavan
相关产品推荐
相关产品推荐

