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

GCC编译C语言数组加值功能代码出现segmentation fault段错误求原因

段错误原因分析
  • addDigit函数中存在死循环,导致全局数组heap越界写入:
    你代码中写的循环条件是while (con >= 0),当con经过运算变为0后,con /= 10的结果始终为0,循环永远不会退出。变量p会持续自增,直到超过heap数组的999长度边界,越界写入非法内存,触发段错误。
  • 输入数组过长可能导致int类型溢出:
    你用int con存储数组拼接后的整数值,32位int的最大值仅为2^31-1 = 2147483647,如果输入的数组长度超过10位,con会发生溢出,出现未定义行为(比如变为负数、乱码值),也可能触发后续内存访问异常。
修复建议
  • 首先修改循环逻辑,避免死循环:
    把while (con >=0)的循环改为do-while结构,保证哪怕con为0也能正确存储,且不会死循环:
    int p = 0;
    do {
        heap[p] = con % 10;
        con /= 10;
        p++;
    } while (con > 0);
    
  • 修正返回结果逻辑:当前你返回的heap2仅赋值了11和-1,没有存储计算结果,需要把heap中倒序存储的各位数字反转后存入heap2,末尾加-1作为结束标记,才能得到预期输出。
  • 如果要支持更长的输入数组,建议直接在数组上做逐位加法,不要拼接为整数,避免溢出问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 04:48:03