32

ポインターが静的、グローバル、または自動の場合は明示的に NULL に設定されていれば、realloc は malloc() なしで使用していました。

しかし、多くのプログラマーがそれを設定したり、malloc(1) に設定したりしようとしていることに気付きました。必要ですか?

4

2 に答える 2

33

Open Groups の仕様から:

ptr が NULL ポインターの場合、realloc() は、指定されたサイズの malloc() と同等でなければなりません。

ptr が、calloc()、malloc()、または realloc() によって以前に返されたポインターと一致しない場合、または空間が以前に free() または realloc() の呼び出しによって割り当て解除されている場合、動作は未定義です。

于 2010-12-16T09:43:45.247 に答える
13

mallocのみ使用できますrealloc

malloc(n)と同等realloc(NULL, n)です。

mallocただし、多くの場合、 の特別なセマンティクスの代わりに使用する方が明確ですrealloc。何が機能するかは問題ではありませんが、コードを読んでいる人々を混乱させることはありません。

realloc(編集: 標準 C ではないため、として機能するという記述を削除しましfreeた。コメントを参照してください。)

于 2010-12-16T09:44:55.697 に答える