我正在做一个游戏项目。我的一个结构包含另一个结构的矩阵。我无法设法获得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 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 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
指针。现在,为了避免额外的struct
将tile_array
替换为指向磁贴的指针。因此,您有一个指向 tile
类型的指针的指针。指向 tile
的指针表示 tile
的数组的开头。指向指向tile
的指针的指针表示此类指针数组的开头。
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));