检查2D Array中相邻的对角线位置
Checking neighboring diagonal positions in 2D Array
我有一个用于在棋盘上存储棋子的2D数组设置,并且我有一些方法允许我检查所选位置的棋子是否可以跳跃。每个方法单独工作,但当我尝试将它们一起使用时-特别是检查西南方向的方法-我得到Access violation reading location
错误。我还不知道如何检查我是否越界了,但我不认为这是问题所在。row
和col
为阵列的height
和width
, r
和c
为用户输入的坐标。
if (jumpPosRightToLeft(board, 'X', 'O', row, col, r,c) ||
jumpPosRightToLeft(board, 'O', 'X', row, col, r,c)) {
cout << "can make move";
}
if (jumpPosLeftToRight(board, 'X', 'O', row, col, r, c) ||
jumpPosLeftToRight(board, 'X', 'O', row, col, r, c)) {
cout << "can make move";
}
方法是这样实现的:
bool jumpPosRightToLeft(char **board, char x, char y, int row, int col) {
if (board[row][col] == x &&
board[row - 1][col + 1] == y &&
board[row - 2][col + 2] == ' ') {
return true;
}
return false;
}
bool jumpPosLeftToRight(char **board, char x, char y, int row, int col) {
if (board[row][col] == x &&
board[row + 1][col - 1] == y &&
board[row + 2][col - 2] == ' ') {
return true;
}
return false;
}
你真是越界了。
你应该这样做:
#define BOARDSIZE 8 // Define whatever board size (square) you want here
bool jumpPosLeftToRight(char **board, char tokenA, char tokenB, int r, int c, int row, int col) {
if (row + 1 >= BOARDSIZE || row + 2 >= BOARDSIZE || col - 1 < 0 || col - 2 < 0) return false;
if (board[row][col] == tokenA &&
board[row + 1][col - 1] == tokenB &&
board[row + 2][col - 2] == ' ') {
return true;
}
return false;
}
我确信你可以很容易地把它推断到你的其他函数上。当使用数组之类的东西时,您应该在尝试对它们进行操作之前始终进行边界检查。
相关文章:
- 将值指定给向量(2D)的向量中的某个位置
- 使用Unreal C++获取VR耳机的世界位置/方向
- 写入位置0x0000000C时发生访问冲突
- 如何将两个不同矢量的同一位置的两个元素组合在一起
- GL_SHADERSTORAGE_BUFFER位置是否与其他着色器位置冲突
- 如何使用cudaMallocManaged在指针位置初始化对象?(C++)
- 无法获取webot::PositionSensor对象中位置传感器的值
- 非常量变量只读位置的赋值
- 如何在cuSparse中得到稀疏矩阵的对角线
- 如何定义更改car类中car位置的方法
- 使用迭代器时如何访问对象在向量中的位置?
- 更改.cpp程序的输入文件中数据的位置会意外更改输出
- 求最大元素位置的分治算法
- 你好。。。id_public变量不应该给出结果为 81 和 86 吗?为什么它为两个派生类占用不同的内存位置?
- 如何打印数组对角线的一侧
- 为什么我的点没有在 OpenGL 中绘制鼠标所在的位置?
- 如何将元素添加到向量的字符串位置
- 如何选择在 csv 文件中输出的位置
- 无法打开 fstream C++文件,即使它与 .cpp 位于同一位置
- 检查2D Array中相邻的对角线位置