返回时指针损坏,但在分配

时间:2018-01-16 00:03:03

标签: c++ arrays pointers malloc

我正在开展一个示例项目,首先使用串行算法,然后编写一个CUDA并行实现来比较结果和速度。

该项目是一个简单的Connect Four游戏。 如果你不知道它的名字,那么这是游戏的Picture

因此,因为我将重用CUDA实现的代码,这些代码必须与cudaMalloc和cudaMemcpy一起使用,所以我使用malloc创建了串行实现。

我的问题出在我的GameBoard类中,它包含初始化和访问字段的方法。我正在使用:

分配矩阵
this->board = static_cast<int*>(malloc(sizeof(int) * GameBoard::BOARD_SIZE));

for (int i = 0; i < GameBoard::BOARD_SIZE; i++)
{
    this->board[i] = 0;
}

*我没有使用calloc来保持它与CUDA实现类似,因为没有cudaCalloc

BOARD_SIZE的位置:

static const int BOARD_HEIGHT = 6;
static const int BOARD_WIDTH = 7;
static const int BOARD_SIZE = BOARD_HEIGHT * BOARD_WIDTH;

我必须使用一个数组并进行数学运算并假装它是一个矩阵,以便稍后进行简单的CUDA实现(指针类型的数组在GPU上不是一个好主意)。

这是我获得“数学”作品的方法:

int GameBoard::getPiece(int x, int y)
{
    std::cout << x * GameBoard::BOARD_WIDTH + y << ", ";
    std::cout << this->board[x * GameBoard::BOARD_WIDTH + y];
    return this->board[x * GameBoard::BOARD_WIDTH + y];
}

这就是我所说的,在printBoard()方法中应该打印当前的电路板状态:

void GameBoard::printBoard()
{
    for (int i = 0; i < BOARD_HEIGHT; i++)
        for (int j = 0; j < BOARD_WIDTH; j++)
            std::cout << getPiece(i, j) << "  ";
    ...
}

我得到的结果是,一个矩阵充满了 -572662307 的“破碎指针”值。但是如果我在初始化方法中粘贴带有测试输出的循环,它会打印出零,就像它应该做的那样。

为什么我得到这种行为,在一个方法中指针工作正常,在下一个方法中,它完全被破坏了?我正在使用相同的getPiece()方法来访问元素,并且在这两个方法调用之间没有任何内容,它们一个接一个地被称为:

// in main
game.startGame();
game.runGame();

// initialization in startGame() with the constructor
this->game_board_ = GameBoard();

// first step in game loop of runGame(), nothing else is done before
game_board_.printBoard();

0 个答案:

没有答案