Игра в шахматы — сбой программы

Я работаю над игрой в шахматы на С ++.
У меня есть занятия:

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);
};

У меня есть класс для каждой части, в которой я реализовал функции перемещения.
классы не имеют отношения, поэтому я просто положил класс пешки для примера.
функция перемещения доски:

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.

Я пытался отправить его разными способами, и ничего не работает,
но этот метод точно так, как мой друг сделал это, и он прекрасно работает для него.
кто-нибудь может помочь?
благодарю вас .

-1

Решение

Массивы в C ++ основаны на 0, что означает, что индекс первого элемента равен 0. Если ваши координаты основаны на 1, это означает, что вы обращаетесь к элементу на одну строку и один столбец в массиве. Это, в свою очередь, приводит к нарушению границ массива и вашему краху. Решением является либо принятие системы координат на основе 0, либо вычитание 1 из координат x / y при доступе к массиву.

1

Другие решения


По вопросам рекламы ammmcru@yandex.ru
Adblock
detector