std::free
提供: cppreference.com
ヘッダ <cstdlib> で定義 | ||
void free(void* ptr ); | ||
以前に std::malloc、 std::calloc、 std::aligned_alloc(C++17以上) または std::realloc によって確保された空間を解放します。
ptr
がヌルポインタの場合、この関数は何もしません。
ptr
の値が以前に std::malloc、 std::calloc、 std::aligned_alloc(C++17以上) または std::realloc によって返された値と等しくない場合、動作は未定義です。
ptr
の参照するメモリ領域がすでに解放されている場合、つまり、引数として ptr
を使用して std::free
または std::realloc がすでに呼ばれ、その後 ptr
と等しいポインタを返した std::malloc、 std::calloc、 std::aligned_alloc(C++17以上) または std::realloc の呼び出しがない場合、動作は未定義です。
std::free
が戻った後、ポインタ ptr
を通してアクセスが行われた場合、動作は未定義です (別の確保関数が ptr
と等しいポインタ値を返した場合を除きます)。
以下の関数はスレッドセーフであることが要求されます。
記憶域の特定の単位を確保または解放するこれらの関数の呼び出しは単一の全順序で発生し、そのような解放の呼び出しそれぞれはこの順序における次の確保 (もしあれば) に対して先行発生します。 | (C++11以上) |
目次 |
[編集]引数
ptr | - | 解放するメモリを指すポインタ |
[編集]戻り値
(なし)
[編集]ノート
特別な場合分けの量を減らすため、この関数はヌルポインタを受理します (そして何もしません)。 確保が成功したかどうかにかかわらず、確保関数が返したポインタは std::free
に渡すことができます。
[編集]例
Run this code
#include <cstdlib> int main(){int* p1 =(int*)std::malloc(10*sizeof *p1); std::free(p1);// every allocated pointer must be freed int* p2 =(int*)std::calloc(10, sizeof *p2);int* p3 =(int*)std::realloc(p2, 1000*sizeof *p3);if(p3)// p3 not null means p2 was freed by std::realloc std::free(p3);else// p3 null means p2 was not freed std::free(p2);}
[編集]関連項目
free の C言語リファレンス |