繁体   English   中英

结构矩阵C的malloc

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM