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