構造体の配列を含む構造体があるというジレンマがあります...
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;
正しく実装しているかどうかわかりません。