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

为何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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:16:35