C++二维数组添加单个元素却出现两个的问题求助
问题原因及解决方案:二维数组越界导致异常元素
核心原因
你遇到的问题本质是数组越界访问,具体细节:
- 代码中定义的棋盘数组是
int gameBoard[7][7];,意味着它只有7行7列,合法索引范围是0~6(C++数组索引从0开始)。 - 但所有涉及数组遍历的逻辑(
initBoard、showBoard、主函数的查找循环)都使用了i <=7和j <=7的条件,会访问到索引7的位置,属于非法内存访问。 - 当执行
gameBoard[7][0] =7时(对应输入a1转换后的坐标),该位置超出数组合法范围,会破坏数组相邻的内存空间。由于数组在内存中连续存储,越界写入的数值会被后续的越界遍历读取到,从而出现“添加一个元素却显示两个”的异常。
解决办法
最合理的修正方式是匹配8x8的棋盘需求,调整数组定义和循环逻辑:
- 修改数组定义:将
int gameBoard[7][7];改为int gameBoard[8][8];,让数组拥有合法的0~7索引范围,刚好对应8行8列的棋盘。 - 规范循环条件:建议将所有循环中的
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
相关产品推荐
相关产品推荐

