トップページ – C言語編 – 標準ライブラリのリファレンス(名前順)
トップページ – C言語編 – 標準ライブラリのリファレンス(ヘッダ別)
概要 | メモリ領域を確保し直す | |
ヘッダ | stdlib.h | |
形式 | void* realloc(void* ptr, size_t size); | |
引数 | ptr | 動的に確保済みの領域を指すポインタ。あるいは、ヌルポインタ。 |
size | 新しく確保する領域の大きさ。 | |
戻り値 |
再確保された領域の先頭を指すポインタ。ただし、このポインタは以前確保されていてメモリ領域と同じメモリアドレスを持つ可能性はある。 メモリ不足などの要因で失敗した場合には、ヌルポインタが返される。 |
|
詳細 |
malloc関数、calloc関数、realloc関数のいずれかで確保された領域を指定して、領域を確保しなおす。元の領域にあった内容は新しい領域にコピーされ、元の領域は解放される。
引数ptr がヌルポインタの場合は、malloc関数と同じ動作になる。
引数size が 0 の場合の扱いについては規格バージョンごとに以下のように何度も改訂されてきたが、C23 で未定義動作となっており、原則として避けるべきである。
|
|
注意 |
システムがメモリ領域を管理するための追加の領域が必要なため、実際に割り当てられる大きさは、size を超える可能性がある。 引数ptr がヌルポインタでないとき、そのポインタが malloc関数、calloc関数、realloc関数によって返されたポインタ(かつ、解放されていない)でない場合の動作は未定義である。 新しい領域の確保に失敗したときにはヌルポインタが返されるが、この場合、元の領域は解放されることなく残されている。そのため、ptr = realloc(ptr, 1000);
のように、第1引数に渡すポインタ変数を使って、戻り値を受け取ってしまうと、元の領域に対して
free関数の呼び出しを行う手段が無くなってしまう可能性がある。この後の「使用例」で示すように、いったん、別の変数に受け取るべきだろう。
|
|
使用例 |
実行結果:
|
|
関連 |
メモリの動的な確保に関わる標準ライブラリ関数として、他に malloc関数、calloc関数がある。いずれにしても、解放は free関数で行う。 |
|
解説章 | 第35章 |
()
の前後の空白の空け方)(
の直後、)
の直前に空白を入れない)return 0;
を削除(C言語編全体でのコードの統一)≪さらに古い更新履歴を展開する≫
Programming Place Plus のトップページへ
はてなブックマーク に保存 | Pocket に保存 | Facebook でシェア |
X で ポスト/フォロー | LINE で送る | noteで書く |
RSS | 管理者情報 | プライバシーポリシー |