繁体   English   中英

在结构内分配结构的动态数组

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM