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类型,但整数除法会导致结果失真。
原因解释
局部数组未初始化的垃圾值问题
C++中,像int v[5]这种在函数内部声明的局部数组,若没有手动初始化,内存里会残留之前程序用过的随机数据,也就是「垃圾值」。这些值没有意义,可能是极大的整数。
原来的v[i] = 0是在计算第i行总和前,先把v[i]清零,这样累加a数组元素时是从0开始,最后得到的是正确的行平均值。移除这句后,v[i]一开始是垃圾值,累加输入值后结果自然是垃圾值加输入值的奇怪超大数。数组越界访问的额外问题
代码最后输出的循环条件是i < 30,但v数组只有5个元素(索引范围是0到4)。访问v[5]到v[29]属于数组越界,会读取v数组后面内存里的垃圾数据,这也是你看到大量超大值的另一个原因。
内容的提问来源于stack exchange,提问作者machete
相关产品推荐
相关产品推荐

