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

使用read系统调用读取时报segmentation fault如何解决?

段错误触发原因

你遇到的崩溃核心原因是栈结构指针未分配合法内存就直接访问:

  • 代码里struct Stack * st;仅声明了一个栈类型的指针变量,此时这个指针指向内存的随机地址,没有对应任何程序可读写的合法内存空间
  • 后续执行st -> top = -1;相当于直接往随机内存地址写入数据,触发操作系统的内存访问保护,直接抛出段错误,实际崩溃位置远早于你标注的if (ch == '\n')行。

修复方案

有两种简单的修复方式可选:

方案1:栈上直接分配结构体实例

不需要使用指针,直接定义结构体变量即可:

struct Stack st;
st.top = -1;
// 后续调用push时传结构体地址即可:push(&st, ch);

方案2:给指针动态分配堆内存

如果必须使用指针,可以先通过malloc申请对应大小的内存,用完记得释放:

#include <stdlib.h>
// ......
struct Stack * st = malloc(sizeof(struct Stack));
if (st == NULL) {
    // 内存申请失败直接退出即可
    return 1;
}
st -> top = -1;

// 程序结束前释放内存
free(st);

其他注意事项

  • 你用到的read是POSIX标准系统调用,需要引入头文件<unistd.h>才能正常编译
  • 要保证MAX宏的数值足够容纳所有输入内容,否则往a数组写数据时会出现越界,也会触发段错误
  • 要实现逆序打印所有行的需求,除了存储字符外还需要额外记录每一行的起始位置/长度,否则逆序输出时无法正确拆分出行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 08:36:03