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

C++中int数组赋值时出现异常大数值问题求助

问题:移除v[i] = 0后数组输出超大数值的原因

原始代码(移除v[i] = 0前)

#include <iostream>
using std::cout;
using std::cin;
using std::endl;

int main(){
    int v[5];
    int a[5][5];
    int i = 0, j = 0;

    for (i = 0; i < 5; i++){
        v[i] = 0;
        for (j = 0; j < 5; j++){
            a[i][j] = 0;
            cout << "A[" << i << ", " << j << "] = " << endl;
            cin >> a[i][j];
            v[i] = v[i] + a[i][j];
        }   
        v[i] = v[i] / 5;
    }   

    for (i = 0; i < 30; i++){
        cout << "v[" << i << "] = " << v[i] << endl;
    }
}

我的问题

我移除第一层for循环下的v[i] = 0语句后,代码能运行但输出v数组的元素都是非常大的数值,搞不懂为什么会这样,希望有人能帮忙解释。

补充说明:这是初学者课程的练习,课程只教基础语法练逻辑,题目要求把数组声明为int类型,但整数除法会导致结果失真。


原因解释

  1. 局部数组未初始化的垃圾值问题
    C++中,像int v[5]这种在函数内部声明的局部数组,若没有手动初始化,内存里会残留之前程序用过的随机数据,也就是「垃圾值」。这些值没有意义,可能是极大的整数。
    原来的v[i] = 0是在计算第i行总和前,先把v[i]清零,这样累加a数组元素时是从0开始,最后得到的是正确的行平均值。移除这句后,v[i]一开始是垃圾值,累加输入值后结果自然是垃圾值加输入值的奇怪超大数。

  2. 数组越界访问的额外问题
    代码最后输出的循环条件是i < 30,但v数组只有5个元素(索引范围是0到4)。访问v[5]到v[29]属于数组越界,会读取v数组后面内存里的垃圾数据,这也是你看到大量超大值的另一个原因。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 07:40:39