为何C语言中方阵自乘结果数组输出显示为内存随机值?
为什么矩阵乘法代码输出疑似内存垃圾值?
兄弟,你这问题我太熟了——本质就是数组没初始化搞的鬼!
先给你拆解核心问题:你定义的answers是局部数组,在C语言里,栈上的局部变量/数组默认不会被自动初始化为0,里面装的都是内存里遗留的随机垃圾值。
看你这段代码:
int answers[M][M];
这行只是给数组分配了内存空间,但完全没给每个元素赋初始值,所以answers[i][j]一开始都是不确定的随机数。
然后你在三重循环里做的是累加操作:
answers[i][j] += R[i][k] * R[k][j];
这相当于 answers[i][j] = 随机垃圾值 + 矩阵乘积的计算结果,最后输出的自然就是带着垃圾值的错误结果,比如你看到的1606416就是这么来的。
怎么解决?
有两种简单靠谱的办法:
- 定义数组时直接初始化全为0:
int answers[M][M] = {0}; // C语言里这样写会把整个数组的元素都设为0 - 或者在计算每个
answers[i][j]之前,手动先清零:for(int i = 0; i < M; i++) { for(int j = 0; j < M; j++) { answers[i][j] = 0; // 先把当前位置清零 for(int k = 0; k < M; k++) { answers[i][j] += R[i][k] * R[k][j]; } } }
这样修改后,answers数组一开始都是干净的0,累加出来的就是正确的矩阵乘积结果了。
内容的提问来源于stack exchange,提问作者G.Coo
相关产品推荐
相关产品推荐

