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

求助:我的C语言程序出现Segmentation Error(段错误),求修复方案

问题排查与修复

核心问题:无限递归引发栈溢出

你的程序出现段错误的根本原因是无限递归,最终耗尽栈空间:

  • 递归调用sum(i++)里,i++是后置自增运算符,会先把当前i的原值传给递归函数,再执行自增操作。这导致每次递归传入的i始终是初始的3,永远达不到终止条件num == i(num固定为5),递归会无限进行下去,触发栈溢出。
  • 另外,sum函数的参数用了旧式C语法(未显式指定int类型),虽能通过部分编译器编译,但不符合现代C标准,存在潜在风险。

修复后的代码

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int sum(int);

int main() {
    printf("%d", sum(3));
    return 0;
}

// 修正参数类型,改用i+1实现正确递增值传递
int sum(int i) {
    int num = 5;

    if (num == i) {
        return i;
    } else {
        // 用i+1替代i++,确保每次递归传入递增后的值
        return i + sum(i + 1);
    }
}

修复说明

  • 把sum(i++)改为sum(i+1):直接传递递增后的值,保证每次递归的i都会加1,直到等于5触发终止条件。
  • 修正sum函数参数声明为int sum(int i):符合C语言标准,消除类型歧义。

修复后程序会正常计算3+4+5,输出结果为12,不会再出现段错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 01:19:58