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

C++二维数组添加单个元素却出现两个的问题求助

问题原因及解决方案:二维数组越界导致异常元素

核心原因

你遇到的问题本质是数组越界访问,具体细节:

  • 代码中定义的棋盘数组是int gameBoard[7][7];,意味着它只有7行7列,合法索引范围是0~6(C++数组索引从0开始)。
  • 但所有涉及数组遍历的逻辑(initBoard、showBoard、主函数的查找循环)都使用了i <=7和j <=7的条件,会访问到索引7的位置,属于非法内存访问。
  • 当执行gameBoard[7][0] =7时(对应输入a1转换后的坐标),该位置超出数组合法范围,会破坏数组相邻的内存空间。由于数组在内存中连续存储,越界写入的数值会被后续的越界遍历读取到,从而出现“添加一个元素却显示两个”的异常。

解决办法

最合理的修正方式是匹配8x8的棋盘需求,调整数组定义和循环逻辑:

  1. 修改数组定义:将int gameBoard[7][7];改为int gameBoard[8][8];,让数组拥有合法的0~7索引范围,刚好对应8行8列的棋盘。
  2. 规范循环条件:建议将所有循环中的i <=7、j <=7改为i <8、j <8(两种写法效果一致,但i <8更符合数组长度的直观判断)。

修改后的核心代码片段

// 修正为8x8的棋盘数组
int gameBoard[8][8];

// 修正后的showBoard函数示例
void showBoard(){
  for (int i = 0; i < 8; i++) {
    for (int j = 0; j < 8; j++) {
      cout << gameBoard[i][j] << " ";
    }
    cout << endl;
  }
  cout << endl;
}

验证效果

修正后,执行添加a1的操作只会在gameBoard[7][0]位置写入7,遍历数组时也只会找到这一个元素,不会再出现越界导致的异常值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 19:30:54