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

C语言打印反转后链表出现Segmentation fault (core dumped)错误如何解决

C语言链表反转段错误排查结果

核心触发原因

  • 局部指针未初始化:你声明struct node *head, *newnode, *temp;时,这三个指针属于main函数内的局部自动变量,C语言不会为这类变量自动赋初始值,其初始值是栈内存残留的随机垃圾值。
  • 第一次创建节点时,if (head == 0)的判断逻辑大概率不会命中(因为head初始值是随机的,大概率不等于0),代码会直接进入else分支,对同样是垃圾值的temp指针执行temp->next = newnode操作,访问非法内存地址触发段错误。

为什么新增指针后才出现报错

这是内存布局变化导致的偶然现象:
之前仅声明3个指针时,未初始化的head/temp的随机值刚好落在系统允许当前进程访问的内存范围内,不会触发内存访问保护;新增第4个指针变量后,栈内存的布局发生改变,未初始化指针的随机值刚好是不可访问的非法地址,就触发了段错误。这个现象和新增指针本身没有逻辑关联,只是刚好暴露了你代码中原本就存在的未初始化bug。

修复方案

将指针声明行修改为手动初始化空指针即可:

struct node *head = NULL, *newnode = NULL, *temp = NULL;

建议使用标准宏NULL代替0表示空指针,代码可读性更高。

内容的提问来源于stack exchange,提问作者Adam Mackie

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 23:27:02