【发布时间】:2016-01-29 16:39:38
【问题描述】:
我已经做了一段时间的研究,但没有找到任何对我有帮助的东西。
我有以下结构声明:
typedef struct position_struct{
int x;
int y;
} pos;
typedef struct item_struct{
char member1;
pos member2;
} item;
typedef struct room_stuct{
item * member3;
pos * member4;
pos member5;
} roomLayout;
尝试对其进行 malloc 的代码是(为简洁起见,我删除了错误检查):
roomLayout *genFloor () {
// Allocate mem for Arrays of:
roomLayout * room = malloc(sizeof(roomLayout) * 6 ); // 6 rooms
room->member3 = malloc(sizeof(item) * 10); // 10 member3's
room->member4 = malloc(sizeof(pos) * 10); // 10 member4's
/* TESTING */
room[0].member3[0].member1 = 'd';
printf("Room[0] is good\n");
room[1].member3[0].member1 = 'd';
printf("Room[1] is good\n"); // Never prints/makes it to this line
return room;
}
当我尝试这个时,分配给 room[1] 会导致崩溃,但不会导致 room[0]。我的猜测是我实际上没有为整个数组分配足够的空间,只有一个位置。但我不明白为什么,因为我相信我在追随我在其他地方看到的东西。
如果有人可以向我解释为这种设置分配内存的过程,那将非常有帮助!谢谢。
【问题讨论】:
-
flexible array members 你可能会感兴趣。
-
停止将数组视为指针。您永远不会为数组分配内存,甚至不会为指针分配内存。您分配一个内存块,然后使用指针指向那里。请解释一下您的“阵列”是如何指向那里的?