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

C语言二维数组初始化出现异常值(-1、1)的原因咨询

为什么我的C语言3x3数组初始化后出现了奇怪的-1和1值?

嗨,这个问题我太熟悉了——本质上是数组越界访问搞的鬼!咱们一步步拆解问题:

1. 先看你的数组边界定义

你用#define MAXCOL 3和#define MAXROW 3定义了数组的大小,所以arr[MAXCOL][MAXROW]是一个3×3的二维数组。在C语言里,数组下标是从0开始的,也就是说这个数组的有效行/列索引只有0、1、2这三个,总共3个位置。

2. 初始化函数的循环犯了边界错误

你的createGame函数里的循环条件用了<=:

for(i=0; i<=MAXCOL; i++){
    for(j=0; j<=MAXROW; j++){
        (*G).arr[i][j] = 0;
    }
}

这就导致i会从0跑到3,j也会从0跑到3——完全超出了数组的有效范围!当i=3或者j=3时,你访问的是arr数组内存之外的区域,这部分内存不属于你的数组,可能是栈上的其他临时变量、函数返回地址,或者只是一块未初始化的“垃圾内存”。

3. 那些-1、1是怎么来的?

  • 当你给越界的内存位置赋值0时,可能不小心覆盖了栈上的其他数据;
  • 而你输出的时候(看起来你的输出循环也用了同样错误的<=条件,读取了4×4的内容),那些没被你赋值的越界位置,就会显示出内存里原本的随机垃圾值——也就是你看到的-1和1。

怎么修复?

把循环条件里的<=改成<,这样就只会遍历数组的有效索引:

void createGame(GAME *G){
    int i, j;
    for(i=0; i < MAXCOL; i++){
        for(j=0; j < MAXROW; j++){
            (*G).arr[i][j] = 0;
        }
    }
}

这样就能正确初始化整个3×3数组,不会再出现奇怪的垃圾值了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:25:02