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

这段C代码运行结果每次不同且不正确,求原因分析及修复方案

C代码输出异常的原因分析与修复

问题原因

核心问题是**sum数组未进行初始化**。这段代码里的sum是局部数组,在C语言中,局部变量如果没有显式初始化,其值是栈内存中遗留的随机垃圾数据,每次程序运行时栈上的残留内容都不一样,所以累加计算出来的结果每次都不同,而且完全不正确。

背后的运行机制

C语言中,函数内的局部变量(包括数组)是分配在栈内存中的。栈内存会反复被不同的函数调用、变量创建销毁复用,当你声明一个局部变量却不初始化时,它会直接使用栈上当前位置的原有数据——这些数据可能是之前程序运行留下的垃圾值,没有任何确定意义。

在代码的累加循环里,sum[i] = s[i][j] + sum[i]第一次执行时,sum[i]就是这个随机垃圾值,后续的累加都是基于这个错误的初始值计算,最终结果自然错误且不可预测。

修复方案

有两种简单的修复方式:

方式一:声明时初始化sum数组

直接在声明sum时将所有元素初始化为0,C语言中如果初始化列表只写{0},会自动把数组所有元素设为0:

int ave[10], sum[10] = {0};

方式二:每次循环前初始化sum[i]

在计算每个学生的总分前,先把sum[i]置为0,再开始累加:

for(i=0;i<10;i++)
{
    sum[i] = 0; // 先初始化当前sum[i]为0
    for(j=1;j<4;j++)
        sum[i]=s[i][j]+sum[i];
    printf("%d\n",sum[i]);
}

修复后的代码运行时,sum的初始值都是0,累加出来的总分就是正确的科目分数之和了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 04:46:13