求助:我的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
相关产品推荐
相关产品推荐

