结构矩阵的 malloc - C

malloc of matrix of struct - C

我正在做一个游戏项目。我的一个结构包含另一个结构的矩阵。我无法让 malloc 工作。这是我的实际代码:

m->tiles = malloc(sizeof(struct *tile)*width);

for (i=0; i<width ; i++){
    m->tiles[i] = malloc(sizeof(struct tile)*height);
}

我收到了这条错误消息:

 map.c:111:37: error: expected ‘{’ before ‘*’ token
 m->tiles = malloc(sizeof(struct *tile)*width);

我以前从来没有这样做过。已经为 int 矩阵分配内存但从未为 struct 矩阵分配内存。

谢谢。

编辑:谢谢 BLUEPIXY,您的回答有效。但我认为我没有很好地定义我的结构 :

struct map{

   int map_width;  // Nombre de tiles en largeur
   int map_height; // Nombre de tiles en hauteur

   struct tile **tiles; // ensemble des tiles de la map
};

应该是"struct tile ***tiles"?

这个

m->tiles = malloc(sizeof(struct *tile)*width);

应该是

m->tiles = malloc(width * sizeof(struct tile *));

所以,固定代码应该是这样的

m->tiles = malloc(width * sizeof(struct tile *));
if (m->tiles == NULL)
    cannotAllocateMemoryAbortPlease();
for (i = 0 ; i < width ; ++i)
    m->tiles[i] = malloc(height * sizeof(struct tile));
struct map{
   int map_width;
   int map_height;
   struct tile **tiles;
};

...

m->tiles = malloc(sizeof(struct tile*)*height);

for (i=0; i<height ; i++){
    m->tiles[i] = malloc(sizeof(struct tile)*width);
}

解释性说明

Type **var_name = malloc(size*sizeof(Type *));

Type **var_name = malloc(size*sizeof(*var_name));

使用 struct tile **tiles 就足够了。可以这样想:

struct tile_array *tiles 显然足以指向一个 tile_array 指针数组。现在为了避免额外的 structtile_array 替换为指向图块的指针。结果,您有一个指向 tile 类型指针的指针。指向 tile 的指针表示 tile 数组的开头。指向 tile 的指针表示此类指针数组的开头。