c - 动态地将结构数组扩展到更大的尺寸

标签 c arrays pointers struct int

我有一个两难选择,我有一个包含结构数组的结构...

typedef struct Container{
    struct Inner *F;
    int length;
} Memo;

typedef struct Inner{
    int *digits;
    int length;
} Inner;

好吧,我称这个函数为:

int expandContainer(Container *container, int n)

所以基本上,当我将这个“容器”传递给“expandContainer”时,我初始化了一个新的具有一定大小的内部数组,然后对其进行 malloc,我想让通过容器通过函数传入的内部数组“扩展”并更新并在退出函数时释放临时内部数组。

需要明确的是,传递给函数的 Inner 无论如何都不会被破坏,因为它将在其他地方使用它只需要按字面意思“扩展”以容纳比它最初能够容纳的数据更多的数据。这是我的...

int arrayLength, i;

//Get new array length
if(((memo->length * 2) + 1) > (n * 2 + 1))
    arrayLength = ((memo->length * 2) + 1);
else
    arrayLength = (n * 2 + 1);

//Create new Array
Inner *biggerArray;

//Malloc new array of Inner Structs
biggerArray = malloc(sizeof(Inner) * arrayLength);

    //Check for errors
    if(biggerArray == NULL)
        panic("ERROR: out of memory in expandContainer()\n");

//Copy data from container->F into biggerArray
for(i=0; i<container->length; i++)
    biggerArray[i] = container->F[i];

//Initialize remaining data in biggerArray
for(i=container->length; i<arrayLength; i++)
    {
        biggerArray[i].digits = NULL;
        biggerArray[i].length = 0;
    }

//Free the old array
for(i=0; i<arrayLength; i++)
    //!!!!THIS DOESN'T WORK!!!!!
    &(memo->F[i]) = &biggerArray[i];

//free the biggerArray created in the function
free(biggerArray);

//update the length of memo
memo->length = arrayLength;

printf("-> Expanded Container capacity to %d.\n", arrayLength);

return arrayLength;

不确定我是否正确实现。

最佳答案

对于扩展本身,您可以使用realloc。它正是你所需要的。分配一个新的(更大的)区域,复制数据并释放旧的。

如果你想用像expandContainer()这样的函数来包装它。它必须通过引用获取指针:

int expandContainer(Container **container, int n)

关于c - 动态地将结构数组扩展到更大的尺寸,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17100713/

相关文章:

c - 在C中以特定格式打印出二维数组

javascript - 使用 Javascript 添加列表

c++ - 创建中的空指针(为缺少的输出数组调用 create()),file/home/m/OpenCV/modules/core/src/matrix_wrap.cpp,第 1461 行

c - 获取 char* 的正确地址

c - 遍历具有不连续整数的数组

c - 教育示例表明有时 printf 作为调试可能会隐藏错误

我可以访问内存中的任何内容吗?

javascript - 函数内 .push 后全局数组未更新

c - 赋值中的类型不兼容,为什么我不能这样做?

c - 从 stdin 读取文件时出错