c -使用大括号给数组赋值

  • 本文关键字:数组 赋值 arrays malloc
  • 更新时间 :
  • 英文 :


在C语言中,为什么下面的表达式失败?

map = malloc(sizeof(Map) * tiles);
map = {
    0,2,0,0,0,0,0,0,2,0,
    0,1,0,0,0,0,0,0,1,0,
    0,0,0,0,0,0,0,0,0,0,
    0,0,0,0,0,0,0,0,0,0,
    0,0,0,0,0,0,0,0,0,0,
    0,0,0,0,0,0,0,0,0,0,
    0,0,0,0,0,0,0,0,0,0,
    0,0,0,0,0,0,0,0,0,0,
    2,1,0,0,0,0,0,0,1,2,
    0,0,0,0,0,0,0,0,0,0
};

我只是想在这样的"行/列"格式填充数据到一个C数组。但是,使用

编译器失败了。
error: expected expression before ‘{’ token

(在map ={行中)。以其他方式填充数组工作得很好,我确信括号可以用于初始化…在我分配了内存之后,我不能这样做吗?

编辑:我通过制作一个临时字符数组,然后在for循环中将数据提供给malloced map来解决这个问题。不动。我想知道为什么上面的代码会泄漏内存,如下所述。我的修复(解析临时数组和设置地图数据)泄漏内存,以及吗?

您的Map * map;是指针,而不是数组。花括号用于聚合初始化:

int x[3] = { 1, 2, 3 };

指针不是数组,不能用聚合初始化语法填充内存。

下面是最接近的结构:

typedef struct Map_ { int a; int b; } Map; // some struct
Map m[] = { {1,2}, {3,4}, {5,6} };  /* we initialized "Map m[3]",
                                       it has automatic storage! */

相关内容

  • 没有找到相关文章

最新更新