我有一个两难境地,我有一个包含结构数组的结构......
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;
不确定我是否正确实施。