如何在C中的结构内重新分配数组的大小?

时间:2012-02-01 21:08:19

标签: c

这是我必须动态声明结构中的数组的代码。我正在动态分配一个名为'capacity'的数组列表。在我的程序的稍后阶段,我想增加我的数组的大小并重新分配它。我该怎么做呢?

struct mystruct {
 int x;
 struct y **list;
};

包装器函数,用于声明结构中存在的数组

struct mystruct *mystruct_init()
{
    struct mystruct *mystruct = calloc(1, sizeof(*mystruct));

    // loop through and allocate memory for each element in list
    mystruct->list = calloc(1, sizeof(struct y *) * mystruct->list_length);

    for (int i = 0; i < capacity; i++)
        mystruct->list[i] = calloc(1, sizeof(struct y));

    return mystruct;
}

调用包装函数

struct mystruct *h1 = mystruct_init();

我的问题是,如何使用realloc函数来增加列表的大小(容量值的两倍)?如果有人可以帮助我,那将是非常好的。

1 个答案:

答案 0 :(得分:1)

假设您有int oldsize

struct y **newlist=realloc(h1->list,oldsize*2*sizeof(struct y*));
if (!newlist) return -1;//error
h1->list=newlist;
int i;
for (i=oldsize;i<2*oldsize;i++) h1->list[i]=calloc(1,sizeof(struct y));