free
| ヘッダー <stdlib.h> で定義 |
||
| void free( void *ptr ); |
||
malloc()、calloc()、aligned_alloc()(C11以降)、またはrealloc()によって以前に割り当てられた領域を解放します。
ptrがヌルポインタの場合、関数は何も行いません。
ptrの値が、以前にmalloc()、calloc()、realloc()、またはaligned_alloc()(C11以降)によって返された値と等しくない場合、動作は未定義です。
ptrが参照するメモリ領域がすでに解放されている場合、つまり、free()、free_sized()、free_aligned_sized()(C23以降)、またはrealloc()がすでにptrを引数として呼び出されており、その後、malloc()、calloc()、realloc()、またはaligned_alloc()(C11以降)のいずれかの呼び出しによってptrと等しいポインタ値が返されていない場合、動作は未定義です。
free()が返された後、ポインタptrを介してアクセスが行われた場合(ただし、別の割り当て関数が偶然ptrと等しいポインタ値を返した場合は除く)、動作は未定義です。
|
メモリ領域を解放する |
(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); }
[編集] 参照
- C23標準 (ISO/IEC 9899:2024)
- 7.24.3.3 The free function (p: 365)
- C17標準 (ISO/IEC 9899:2018)
- 7.22.3.3 The free function (p: 254)
- C11標準 (ISO/IEC 9899:2011)
- 7.22.3.3 The free function (p: 348)
- C99標準 (ISO/IEC 9899:1999)
- 7.20.3.2 The free function (p: 313)
- C89/C90標準 (ISO/IEC 9899:1990)
- 4.10.3.2 The free function
[編集] 関連項目
| メモリを割り当てる (関数) | |
| (C23) |
以前に割り当てられたサイズのメモリを解放する (関数) |
| (C23) |
以前に割り当てられたサイズとアライメントのメモリを解放する (関数) |
| C++ドキュメント (free)
| |