我已经做了一段时间的研究,但没有找到任何对我有帮助的东西。
我有以下结构声明:
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]。我的猜测是我实际上没有为整个阵列分配足够的空间,只有一个位置。但我不明白为什么,因为我相信我正在遵循我在其他地方看到的东西。
如果有人可以向我解释为这种设置分配内存的过程,那将非常有帮助!谢谢。
最佳答案
您只为第一个房间
分配了member3
和member4
;不适合所有人。在room->member3
这一行中,room
在内存段的开头,也就是在room[0]
处,为10个成员。然而,room[1]
没有为任何成员分配任何空间(门也是如此)。通过在循环中分配来解决这个问题:
for(i = 0; i < 6; ++i)
{
room[i].member3 = malloc(sizeof(room[i].member3) * 10);
room[i].member4 = malloc(sizeof(room[i].member4) * 10);
}
当释放
内存时,记得使用类似的循环,即
for(i = 0; i < 6; ++i)
{
free(room[i].member3);
free(room[i].member4);
}
free(room);
关于c - Malloc 'ing 结构中的结构数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35089603/