我有以下结构,我正在尝试为下面的结构区域分配空间。
目前,我为该区域分配的空间为:
zone *zones = (zone*)malloc(sizeof(zone) + (sizeof(school)*3));
假设,我有3个学校,每个学校内有3个比赛
typedef struct competition {
int prize_1;
int prize_2;
int prize_3;
} competition;
typedef struct school {
int school_id;
competition *competitions;//[Singing, Dancing, Soccer....]
} school;
typedef struct zone {
school *schools; //[School 0, School 1, School 2.....];
} zone;
当我尝试访问时:
school *cs = &(zones->school[0]); //Get the appropriate school
int schoolId = cs->school_id; //get the school id of a school
我收到分段错误错误。我知道我没有为区域正确分配内存,但我不确定如何正确分配内存
schools
成员没有指向任何地方,因此尝试取消引用该指针会触发未定义的行为。
您需要首先为该区域分配空间,然后为其指向的学校数组分配空间:
zone *zones = malloc(sizeof(zone));
zones->schools = malloc(sizeof(school)*3);