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

C++实现Connect 4横向获胜判定2D数组函数运行异常排查

四子棋横向获胜判定函数故障排查

以下是你代码中的核心问题:

  • 变量名拼写错误:if判定逻辑中第四个棋子的数组名误写,前三个访问的是Board棋盘数组,第四个错写为dyBoard,读取的不是当前棋盘的对应位置数据,直接导致判定逻辑失效。
  • 循环边界逻辑错误:横向获胜的判定要求同一行内连续4列的棋子相同,因此列下标的最大起始值应为总列数 - 3,才能保证j+3不会超出列的合法范围。你的代码错误使用row - 3(行数减3)作为列循环的边界,若行列数不相等,会直接漏掉绝大多数合法的横向四子连珠场景。
  • 删除-3的操作反而引入新问题:移除循环条件中的-3后,列下标j会遍历到最大列数,此时访问j+3会直接超出数组的合法访问范围,触发内存越界错误,引发程序崩溃或者返回异常结果,无法解决原有问题。
  • 数组维度对应逻辑问题:如果你的Board[i][j]定义中i是列下标、j是行下标,当前的横向判定逻辑完全写反,需要调整为固定列下标i,判定连续行下标位置的棋子是否相同。

如果你的Board数组按[行号][列号]定义,修正后的代码如下:

// 横向获胜判定:同一行内连续4列棋子相同
for (int i = 0; i < row; i++) {
    for (int j = 0; j < column - 3; j++) {
        if (Board[i][j] == charvar 
            && Board[i][j + 1] == charvar 
            && Board[i][j + 2] == charvar 
            && Board[i][j + 3] == charvar) {
            return charvar;
        }
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 07:45:05