struct - C矩阵的malloc

时间:2015-01-26 23:55:05

标签: c struct malloc

我正在开发一个游戏项目。我的一个struct包含另一个struct的矩阵。我无法得到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”?

3 个答案:

答案 0 :(得分:2)

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));

答案 1 :(得分:2)

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

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

答案 2 :(得分:0)

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));