我有下面的结构,我试图分配空间的结构区下面。
目前,我正在为该区域分配空间:
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
我得到一个分段错误。我知道我没有为Zone正确分配内存,但我不确定如何正确分配内存
2条答案
按热度按时间wvyml7n51#
schools
成员没有指向任何地方,因此尝试解引用该指针会触发undefined behavior。您需要首先为区域分配空间,然后为它指向的学校数组分配空间:
hkmswyz62#
要使用分配算法,您需要尽可能使用灵活的数组成员而不是指针,因为它简化了分配和释放。