[英]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”吗?
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));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.