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

DAG程序出现Segmentation Fault,请求错误定位与代码修正帮助

DAG程序段错误分析与修复

错误原因

执行l=strlen(input1);时触发Segmentation Fault的核心原因是**input1是未初始化的野指针**:

  • 代码中仅声明了char *input1;,但未给该指针分配有效内存,也未让它指向已初始化的字符串(比如同声明的input[25]数组)。
  • strlen()函数需要访问指针指向的内存来查找字符串结束符\0,野指针指向的内存地址是不确定的,属于非法内存访问,直接触发段错误。

修正方案

根据需求选择以下两种修复方式:

方式1:复用栈上的input数组

如果不需要动态内存,直接让input1指向已声明的input数组,先完成输入初始化再调用strlen:

// 读取输入到input数组(限制长度防止溢出)
fgets(input, sizeof(input), stdin);
// 移除fgets自动添加的换行符
input[strcspn(input, "\n")] = '\0';
// 让input1指向input的有效内存
input1 = input;
// 安全计算字符串长度
l = strlen(input1);

方式2:动态分配内存给input1

如果需要独立的内存空间,使用malloc分配内存,注意检查分配结果并在使用后释放:

// 分配25字节内存(与input数组容量一致)
input1 = (char*)malloc(25 * sizeof(char));
if (input1 == NULL) {
    perror("malloc failed");
    return 1; // 内存分配失败时终止程序
}
// 读取输入到input1,限制输入长度为24(留1字节存结束符)
scanf("%24s", input1);
// 计算字符串长度
l = strlen(input1);

// 程序结束前释放动态分配的内存
free(input1);

注意事项

  • 所有指针在使用前必须初始化,确保指向可访问的有效内存。
  • 使用字符串处理函数时,必须保证输入字符串以\0结尾,避免越界访问。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 21:35:17