C的矩阵的malloc

  • 本文关键字:malloc c struct malloc
  • 更新时间 :
  • 英文 :


我正在做一个游戏项目。我的一个结构包含另一个结构的矩阵。我无法设法获得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指针。现在,为了避免额外的structtile_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));

相关内容

  • 没有找到相关文章

最新更新