如何为结构体中的动态结构体数组分配内存?

问题描述 投票:0回答:1

我有以下结构,我正在尝试为下面的结构区域分配空间。

目前,我为该区域分配的空间为:

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

我收到分段错误错误。我知道我没有为区域正确分配内存,但我不确定如何正确分配内存

c pointers struct malloc dynamic-arrays
1个回答
1
投票

schools
成员没有指向任何地方,因此尝试取消引用该指针会触发未定义的行为

您需要首先为该区域分配空间,然后为其指向的学校数组分配空间:

zone *zones = malloc(sizeof(zone));
zones->schools = malloc(sizeof(school)*3);
© www.soinside.com 2019 - 2024. All rights reserved.