我的内存分配不正确,因此我遇到了段错误。我想创建一个由二维案例(结构)表示的棋盘游戏。 对于上下文,我正在编写俄罗斯方块游戏。四格骨牌是玩家可以放置在棋盘游戏上的棋子。棋盘游戏有一些特殊情况可以让你赢得牌,这就是我使用 2D 结构表的原因。
董事会的结构:
typedef struct str_board {
int row;
int col;
box ** game_grid;
} *board;
盒子的结构:
typedef struct str_box {
int special;
tetromino t;
}box;
我尝试用函数初始化它:
void init_game_grid(board b) {
int count = 8;
b->game_grid = malloc(b->row_number * sizeof(box*);
for(int i = 0; i<b->row_number; i++) {
b->game_grid[i] = malloc(b->row_column * sizeof(box*);
for(int j = 0; j<b->column_number; j++) {
b->game_grid[i][j].t = NULL;
int r = rand % 2;
if(r == 1 && count> 0){
count --;
b->game_grid[i][j].spécial = 1;
}
else{
b->game_grid[i][j].spécial = 0;
}
}
}
}
我希望初始化后,板子是空的,有些情况是特殊的。 我有几个无效的写入导致崩溃,在测试了我如何执行 malloc 的几种变体之后,我不知道要更改什么。
b->game_grid = malloc(b->row_number * sizeof(box*);
b
,其类型为 struct str_board *
,没有名为 row_column
的成员。它有一个 row
成员、一个 col
成员和一个 game_grid
成员。
继续前进,这个电话给
malloc()
:
b->game_grid[i] = malloc(b->row_column * sizeof(box*);
毫无意义。您应该为
box
分配内存,而不是 box *
。应该是:
b->game_grid = malloc(b->row_number * sizeof b->game_grid[0]);