尝试分配 2D 结构表时写入无效

问题描述 投票:0回答:1

我的内存分配不正确,因此我遇到了段错误。我想创建一个由二维案例(结构)表示的棋盘游戏。 对于上下文,我正在编写俄罗斯方块游戏。四格骨牌是玩家可以放置在棋盘游戏上的棋子。棋盘游戏有一些特殊情况可以让你赢得牌,这就是我使用 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 的几种变体之后,我不知道要更改什么。

c struct malloc valgrind
1个回答
0
投票
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]);
© www.soinside.com 2019 - 2024. All rights reserved.