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
相关产品推荐
相关产品推荐

