ここで学んだことを使用して: How to use realloc in a function in C、私はこのプログラムを書きました。
int data_length; // Keeps track of length of the dynamic array.
int n; // Keeps track of the number of elements in dynamic array.
void add(int x, int data[], int** test)
{
n++;
if (n > data_length)
{
data_length++;
*test = realloc(*test, data_length * sizeof (int));
}
data[n-1] = x;
}
int main(void)
{
int *data = malloc(2 * sizeof *data);
data_length = 2; // Set the initial values.
n = 0;
add(0,data,&data);
add(1,data,&data);
add(2,data,&data);
return 0;
}
dataこのプログラムの目標は、値を追加し続けることができる動的配列を作成することです。に値を追加しようとすると、値dataがいっぱいの場合、realloc を使用して配列の長さが増加します。
質問
このプログラムはコンパイルされ、実行時にクラッシュしません。ただし、 を出力するdata[0]とdata[1]、data[2]が得られ0,1,0ます。番号2は配列に追加されませんでした。
これは私の間違った使い方によるものreallocですか?
追加情報
このプログラムは、後でさまざまな数の「追加」および場合によっては「削除」機能で使用されます。また、realloc失敗した ( である) かどうかを確認する必要があることはわかっNULLていますが、簡単にするためにここでは省略しています。
私はまだ C の学習と実験を行っています。しばらくお待ちいただきありがとうございます。