提问人:wei jong 提问时间:10/7/2023 更新时间:10/7/2023 访问量:71
如何为结构中的动态结构数组分配内存?
How do I allocate memory for dynamic array of structures in a structure?
问:
我有下面的结构,我正在尝试为下面的结构区域分配空间。
目前,我正在为该区域分配空间:
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
我收到分段故障错误。我知道我没有为区域正确分配内存,但我不确定如何正确分配内存
答:
1赞
dbush
10/7/2023
#1
该成员未指向任何位置,因此尝试取消引用该指针会触发未定义的行为。schools
您需要首先为区域分配空间,然后为它指向的学校数组分配空间:
zone *zones = malloc(sizeof(zone));
zones->schools = malloc(sizeof(school)*3);
评论
0赞
wei jong
10/7/2023
那么,我是否应该为个别学校的“比赛”分配单独的空间?或者我可以一次为所有学校的所有比赛分配空间吗?你能帮我做同样的事情吗,那真的很有帮助?
0赞
dbush
10/7/2023
@weijong 是的,您还需要分配每个成员指向的空间。competitions
0赞
wei jong
10/7/2023
在这里,我有 3 所学校,那么我是否应该进入每所学校,为每所学校单独分配每场比赛的空间?比如说,我有100所学校,我很难进入每所学校,并在每所学校创造一个竞争空间,对吧?任何建议都值得赞赏!
0赞
dbush
10/7/2023
@weijong 是的,您需要分配每个成员指向的空间。competitions
1赞
0___________
10/7/2023
1. 我会检查分配是否失败。2.我会在sizeof
1赞
0___________
10/7/2023
#2
若要使用分配算法,需要尽可能使用灵活的数组成员而不是指针,因为它可以简化分配和解除分配。
- 请记住也要存储已分配对象的数量。
- 始终检查分配错误并提供错误处理。
typedef struct competition {
int prize_1;
int prize_2;
int prize_3;
} competition;
typedef struct school
{
int school_id;
size_t numCompetitions;
competition competitions[];
} school;
typedef struct zone
{
size_t numSchools;
school *schools[];
} zone;
school *allocateSchool(size_t numCompetitions)
{
school *sch = malloc(sizeof(*sch) + numCompetitions * sizeof(sch -> competitions[0]));
if(sch) sch -> numCompetitions = numCompetitions;
return sch;
}
zone *allocateZones(size_t numZones)
{
zone *zn = malloc(sizeof(*zn) + numZones * sizeof(zn -> schools[0]));
if(zn) zn -> numSchools = numZones;
return zn;
}
评论
0赞
Support Ukraine
10/7/2023
OT:对我来说,这个名字令人困惑。我宁愿numZones
numSchools
上一个:根据上一个表的TD输入值计算值
评论