私は 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.
}