c++程序中的内存损坏

Memory Corruption in C++ program

本文关键字:内存 损坏 程序 c++      更新时间:2023-10-16

我想通过写一个关于康威生活的游戏来提高我的c++水平。

GameBoard对象正在损坏。我直接从游戏对象构造函数调用它的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);