[英]Allocating dynamic array of structures within a structure
我有以下结构:
struct date {
int year;
int month;
int day;
};
struct person{
char name[64];
struct date birthday;
};
struct aop {
int max;
struct person **data;
};
我尝试使用malloc在aop结构中获取数据,如下所示:(此处未发生错误)
struct aop *create_aop(int max) {
struct aop *s = malloc(sizeof(struct aop));
s->max = max;
s->data = malloc((sizeof(struct person)) * max);
return s;
}
但是,当我尝试访问代码其他部分中的“数据”时,例如:
a->data[len]->birthday.year = birthday.year;
我有错误。
我是用错误的方式分配malloc,还是不正确地访问数据?
先感谢您!
在aop结构中,结构人不需要双指针。 所以
struct aop {
int max;
struct person **data;
};
更改struct person **data;
至
struct person *data;
并在使用时按以下方式使用它。
a->data[len].birthday.year = birthday.year;
aop结构中的字段数据是Poiters数组,因此首先需要为指针分配内存:
s->data = malloc((sizeof(struct person*)) * max);
然后在循环中,您需要为每个结构分配内存:
for(i = 0; i < max; i++) {
s->data[i] = malloc(sizeof(struct person));
}
我试图在这里创建相同的结构,但无法访问该结构Person。
由于您愿意创建多人条目,因此如何创建链接列表? 喜欢:
struct aop {
int max;
struct person **data;
};
struct person{
char name[64];
struct date birthday;
struct person *nextPerson;
};
可能会起作用。
我是用错误的方式分配malloc,还是不正确地访问数据?
是。 研究这个令人难以置信的信息图表:
Type *****var = malloc (sizeof(Type****) * n_items);
/* ----- ---- */
/* | | */
/* +---> n stars +---> n-1 stars */
如果您有一颗以上的星星,则说明您还没有完成。 您需要在下一个间接级别分配数据:
for (i = 0; i < n_items; ++i)
{
var[i] = malloc (sizeof(Type***) * n_items_level2);
/* --- */
/* | */
/* +---> n-2 stars */
如果您仍然有星星,那么您还没有完成。 您需要在嵌套循环的下一个间接级别分配数据:
for (j = 0; j < n_items_level2; ++j)
{
var[i][j] = malloc (sizeof(Type**) * n_items_level3);
以此类推,直到星星耗尽。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.