NULL
が渡された場合、realloc
は と同等malloc
です。このNULL
呼び出しは、ある種のループで再割り当てを行っていて、最初に割り当てたときに特別なケースを持ちたくない場合に便利です。
malloc と realloc を使用するかなり標準的な方法は次のとおりです。
int* p;
p = malloc(10 * sizeof(int)); //Note that there's no cast
//(also, it could just be int* p = malloc(...);)
int* np = realloc(p, 15 * sizeof(int));
//Note that you keep the old pointer -- this is in case the realloc fails
余談ですが、宣言と代入が異なる行に表示される主な理由は履歴です。C の古いバージョンでは、宣言は関数の最初に来なければなりませんでした。つまり、関数が 20 行まで変数を使用しなかったとしても、先頭で宣言する必要がありました。
通常、別の 20 行で使用されていない変数の値がどうあるべきかわからないため、常に意味のある値に初期化できるとは限りません。関数。
C99/C11 では、スコープの先頭で変数を宣言する必要はありません。実際、一般的には、変数を可能な限り使用に近い形で定義することが推奨されています。