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

C语言访问动态字符串数组时出现Segmentation Fault问题求助

问题原因分析
  • 最常见原因:函数内部定义了同名局部变量遮蔽了全局变量
    如果你在read_prop_file函数内又声明了一个同名的unsigned char **prop_cmd_parameters局部变量,那么你所有赋值操作都只会修改局部变量,全局的prop_cmd_parameters仍然是未初始化的野指针,函数外部访问全局变量时自然触发段错误。你可以尝试在read_prop_file函数结束前打印prop_cmd_parameters的地址值,再在外部访问前打印一次,两者不一致就能确认是该问题。
  • read_prop_file未被实际调用
    如果你的代码逻辑中没有执行过read_prop_file,全局的prop_cmd_parameters没有被分配内存,保持初始野指针状态,访问就会触发段错误。
  • 数组越界访问
    全局的prop_cmd_number值被其他代码意外修改,或者你外部访问时使用了大于等于prop_cmd_number的下标,访问超出了数组申请的边界,触发段错误。
  • 内存分配失败未检查
    你当前代码没有检查malloc的返回值,如果系统内存不足导致malloc返回NULL,访问NULL指针会直接触发段错误。建议增加如下检查逻辑,同时注意prop_cmd_parameters是unsigned char **类型,sizeof参数最好匹配类型更规范:
    prop_cmd_parameters = malloc(prop_cmd_number * sizeof(unsigned char *));
    if (prop_cmd_parameters == NULL) {
        // 自定义错误处理逻辑
        return;
    }
    for(i=0; i<prop_cmd_number; i++){
        prop_cmd_parameters[i] = malloc(200 * sizeof(unsigned char)); 
        if (prop_cmd_parameters[i] == NULL) {
            // 自定义错误处理逻辑
            return;
        }
        // 后续文件读取逻辑
    }
    
  • 其他潜在问题(可能间接破坏内存结构引发段错误)
    1. 循环变量i未声明:你当前代码中的for(i=0; i<prop_cmd_number; i++)没有声明i变量,如果i不是全局变量,编译时会使用默认类型,值可能异常导致数组越界。
    2. 输入读取逻辑存在边界风险:你没有限制tmp_len的最大值,若单行长超过200字节会触发堆内存溢出,破坏已分配的内存结构,后续访问任意堆内存都可能触发段错误。
    3. 文件指针有效性未检查:如果prop_config文件打开失败,fscanf会读取失败导致prop_cmd_number值异常,后续malloc大小错误引发问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 13:18:03