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

C程序传递-f文件名参数时出现zsh: bus error错误如何解决

问题根因

你遇到的总线错误和参数传递方式无关,是代码本身存在非法内存写入问题,核心错误点在fname变量的初始化逻辑:

fname = (char *)malloc(200*sizeof(char));
fname = "abr.res";
  • 第一行申请了200字节的可写堆内存,将内存地址赋值给fname
  • 第二行直接将fname重新指向了只读数据段的字符串常量"abr.res",不仅造成malloc的内存泄漏,后续处理-f参数时执行strcpy(fname, optarg)相当于往只读内存写入数据,直接触发总线错误。
修复方案

修改fname的初始化逻辑即可,推荐两种修改方式:

方案1:保留malloc逻辑,正确初始化默认值

将原有两句初始化代码替换为:

fname = (char *)malloc(200*sizeof(char));
if (fname == NULL) {
    perror("malloc");
    exit(1);
}
strcpy(fname, "abr.res");

方案2:改用栈数组简化逻辑,避免内存泄漏风险

将变量定义处的char *fname;修改为:

char fname[200] = "abr.res";

同时删除原有两句malloc和赋值的初始化代码即可。

传参说明

修复代码后,你原本使用的./abr1 -f "result01.res"命令完全符合参数要求,可以正常运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 08:54:04