Я пытаюсь улучшить свой C ++, написав игру о жизни Конвея.
Объект GameBoard поврежден. Я называю его print()
метод непосредственно из конструктора объекта Game, и он работает. Затем я вызываю его косвенно через метод Game_print print_board и получаю сообщение об ошибке проверки целостности.
Кроме того, в основном, есть объявление переменной, которую я никогда не использую, но если я удалю ее, ошибка исчезнет. Почему-то я что-то делаю, чтобы испортить память. Это, наверное, довольно очевидно.
Любая помощь с благодарностью!
#include <iostream>
using namespace std;class Board {
int size;
int grid[100][100];
public:
Board(int board_size) {size = board_size;}
void print() {
cout << "Board::print()" << endl;
if (size < 1) {cout << "print: size must be > 0: size=" << size << "\n"; exit(1);}
}
};
class GameRuleSet { }; // Methods removed
class Game {
private:
Board * game_board;
GameRuleSet * rule_set;
public:
Game (GameRuleSet * p_rule_set, int p_board_size) {
Board * game_board = new Board(p_board_size);
cout << "Second Call - indirect..." << endl;
game_board->print();
cout << "Second Call - direct..." << endl;
this->print_board(); // Error manifests from here
}
void print_board() {game_board->print();}
};int main () {
int num_turns = 10; // This line manifests error.
int board_size = 10;
GameRuleSet rule_set = GameRuleSet();
Game game = Game(&rule_set, board_size);
}
Вы повторно объявляете «Board * game_board» в своем конструкторе, который скрывает переменную-член с тем же именем. Затем он использует выделенную локальную game_board в конструкторе для печати.
В функции print_board () он использует нераспределенный член и поэтому выдает ошибку.
Изменить распределение с
Board * game_board = new Board(p_board_size);
в
game_board = new Board(p_board_size);
в конструкторе, чтобы исправить это.