gpt4 book ai didi

c++ - 国际象棋游戏-程序崩溃

转载 作者:行者123 更新时间:2023-12-02 03:02:30 31 4
gpt4 key购买 nike

我正在用 C++ 开发国际象棋游戏。我有类(class):

class piece
{
protected :
point position ;
char represent ;
bool colour; // true for player 1 = green , false for player 0 = blue
public :
virtual ~piece() ;
bool find_player(piece* to_check, int num);
char get_char() ;
bool get_colour() ;
virtual bool move_setup(point source, point dest, piece* arr[][SIZE] ) = 0 ;
virtual bool move(point source, point dest, piece* arr[][SIZE]) = 0;
bool same_player(point dest, piece* arr[][SIZE], int* num);
};

class board
{
private:
piece* arr[SIZE][SIZE] ;
public :
board();
void free_borad();
void set_piece(int x , int y , int type , bool colour );
void print_board();
void move(point source , point dest);
void set_colour(int i , int j , bool reset );
};
class pawn : public piece
{
public :
pawn(point position , bool colour );
~pawn();
virtual bool move_setup(point source, point dest, piece* arr[][SIZE]);
virtual bool move(point source, point dest, piece* arr[][SIZE]);
bool if_forward(point source, point dest);
bool if_diagonal(point source, point dest, int* offset);
};

我为每一个我实现了移动功能的作品都有一个类。这些类不相关,所以我只是为示例放置了一个 pawn 类。棋盘移动功能:

void board::move(point source, point dest)
{
if (arr[source.get_x()][source.get_y()]) // if not empty
{
int x = source.get_x(), y = source.get_y() ;
if (arr[x][y]->move_setup(source, dest, arr ) ) // if the piece can move there
{
delete arr[dest.get_x()][dest.get_y()];
arr[dest.get_x()][dest.get_y()] = arr[source.get_x()][source.get_y()];
arr[source.get_x()][source.get_y()] = NULL;
std::cout << " Succes! " << std::endl;
}
else
{
// error
}
}
else // empty
{
// error
}

}

我的程序崩溃了

if (arr[x][y]->move_setup(source, dest, arr ) ) 

我使用VS调试器调试了它,发现发送数组时发生崩溃,错误消息:

读取位置 0xFFFFFFFF 时发生访问冲突。

我尝试过很多不同的方式发送它,但没有任何效果,但这个方法正是我的一个 friend 所做的,而且对他来说效果很好。有人可以帮忙吗?谢谢。

最佳答案

C++ 中的数组是从 0 开始的,这意味着第一个元素的索引是 0。如果您的坐标是从 1 开始,则意味着您正在访问数组中一行一列之外的元素。这反过来会导致突破数组的界限并导致崩溃。解决办法是要么采用基于0的坐标系,要么在访问数组时将x/y坐标减1。

关于c++ - 国际象棋游戏-程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27658533/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com