我正在开发一个游戏项目。我的一个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”?
答案 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));