malloc で配列を拡張する 質問する

malloc で配列を拡張する 質問する

私は malloc と C 全般についてあまり詳しくありません。必要に応じて、固定サイズの配列のサイズを malloc で拡張する方法を知りたいと思いました。

例:

#define SIZE 1000
struct mystruct
{
  int a;
  int b;
  char c;
};
mystruct myarray[ SIZE ];
int myarrayMaxSize = SIZE;
....
if ( i > myarrayMaxSize )
{
   // malloc another SIZE (1000) elements
   myarrayMaxSize += SIZE;
}
  • 上記の例から、私が何を達成したいのかが明らかになるはずです。

(ちなみに、私が書いたインタープリターにはこれが必要です: 固定数の変数で作業し、さらに必要な場合は動的に割り当てるだけです)

ベストアンサー1

使用再割り当てただし、最初に malloc を使用して配列を割り当てる必要があります。上記の例では、スタック上に割り当てています。

   size_t myarray_size = 1000;
   mystruct* myarray = malloc(myarray_size * sizeof(mystruct));

   myarray_size += 1000;
   mystruct* myrealloced_array = realloc(myarray, myarray_size * sizeof(mystruct));
   if (myrealloced_array) {
     myarray = myrealloced_array;
   } else {
     // deal with realloc failing because memory could not be allocated.
   }

おすすめ記事