std::free
From 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 がすでに呼び出されており、その後に std::malloc、std::calloc、std::aligned_alloc(C++17以降)、またはstd::realloc が ptr と等しいポインタ値を返していなかった場合)、未定義の動作となります。
std::free が返された後、ポインタ ptr を介したアクセスが行われた場合(別の割り当て関数が偶然 ptr と等しいポインタ値を返した場合は除く)、未定義の動作となります。
|
以下の関数はスレッドセーフである必要がある
これらの関数に対する、特定のストレージ単位を割り当てるまたは解放する呼び出しは、単一の総順序で発生し、そのような各解放呼び出しは、この順序での次の割り当て(もしあれば)よりhappens-beforeである。 |
(C++11以降) |
目次 |
[編集] パラメータ
| ptr | - | 解放するメモリへのポインタ |
[編集] 戻り値
(なし)
[編集] ノート
この関数は、特別な処理の量を減らすために、ヌルポインタを受け入れ(何も行いません)。割り当てが成功したかどうかにかかわらず、割り当て関数によって返されたポインタは std::free に渡すことができます。
[編集] 例
このコードを実行
#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 null means realloc failed and p2 must be freed. std::free(p2); std::free(p3); // p3 can be freed whether or not it is null. }
[編集] 関連項目
| C 言語のドキュメント (free)
|