free
ヘッダ <stdlib.h> で定義
|
||
void free( void* ptr ); |
||
以前に malloc()、 calloc()、 aligned_alloc() (C11以上) または realloc() によって確保された空間を解放します。
ptr
がヌルポインタの場合、この関数は何もしません。
ptr
の値が以前に malloc()、 calloc()、 realloc()、 または aligned_alloc() (C11以上) によって返された値と等しくない場合、動作は未定義です。
ptr
の参照するメモリ領域がすでに解放されている場合、つまり、引数として ptr
を使用して free()
または realloc() がすでに呼ばれ、その後 ptr
と等しいポインタを返した malloc()、 calloc()、 aligned_alloc() (C11以上) または realloc() の呼び出しがない場合、動作は未定義です。
free()
が戻った後、ポインタ ptr
を通してアクセスが行われた場合、動作は未定義です (別の確保関数が ptr
と等しいポインタ値を返した場合を除きます)。
メモリ領域を解放する free の呼び出しは、同じメモリ領域またはその一部を確保するあらゆる後続の確保関数の呼び出しに対して同期します。 この同期は解放関数によるそのメモリに対するいかなるアクセスよりも後でかつ確保関数によるそのメモリに対するいかなるアクセスよりも前に発生します。 個々の特定のメモリ領域を操作するすべての確保関数および解放関数に単一の全順序が存在します。 |
(C11以上) |
目次 |
[編集] 引数
ptr | - | 解放するメモリを指すポインタ |
[編集] 戻り値
(なし)
[編集] ノート
特別な場合分けの量を減らすため、この関数はヌルポインタを受理します (そして何もしません)。 確保が成功したかどうかにかかわらず、確保関数が返したポインタは free
に渡すことができます。
[編集] 例
#include <stdlib.h> int main(void) { int *p1 = malloc(10*sizeof *p1); free(p1); // every allocated pointer must be freed int *p2 = calloc(10, sizeof *p2); int *p3 = realloc(p2, 1000*sizeof *p3); if(p3) // p3 not null means p2 was freed by realloc free(p3); else // p3 null means p2 was not freed free(p2); }