C++程序中的内存损坏
Memory Corruption in C++ program
我正在尝试通过编写康威一生的游戏来提高我的 C++。
GameBoard 对象正在损坏。我直接从 Game 对象构造函数调用它的 print()
方法并且它起作用了。然后,我通过 Game 的 print_board 方法间接调用它,并在完整性检查中遇到错误。
此外,在 main 中,有一个我从未使用过的变量声明,但如果我删除它,错误就会消失。不知何故,我正在做一些破坏记忆的事情。这可能很明显。
非常感谢任何帮助!
#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);
在构造函数中解决这个问题。
我正在尝试通过编写康威一生的游戏来提高我的 C++。
GameBoard 对象正在损坏。我直接从 Game 对象构造函数调用它的 print()
方法并且它起作用了。然后,我通过 Game 的 print_board 方法间接调用它,并在完整性检查中遇到错误。
此外,在 main 中,有一个我从未使用过的变量声明,但如果我删除它,错误就会消失。不知何故,我正在做一些破坏记忆的事情。这可能很明显。
非常感谢任何帮助!
#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);
在构造函数中解决这个问题。