中的結構數組我一直在做研究一段時間,而且我沒有找到任何可以幫助我的東西。Malloc在結構體struct
我有以下結構聲明:
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;
}
當我嘗試這一點,分配到房間[1]導致崩潰,但不是房間[0]。我的猜測是,我沒有真正爲整個陣列分配足夠的空間,只有一個點。但我不明白爲什麼,因爲我相信我遵循我在其他地方看到的。
如果有人可以向我解釋爲這種設置分配內存的過程,那將非常有幫助!謝謝。
[靈活數組成員](https://en.wikipedia。org/wiki/Flexible_array_member)可能會讓你感興趣。 –
停止將數組視爲指針。即使是指針,也不會爲數組分配內存。你分配一個內存塊,你使用一個指針指向那裏。請解釋一下你的「陣列」是如何指向那裏的? – Michi