std:: free
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
ヘッダーで定義
<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
が指すメモリ領域が既に解放されている場合、すなわち
std::free
または
std::realloc
が既に
ptr
を引数として呼び出され、その後
std::malloc
、
std::calloc
、
std::aligned_alloc
(C++17以降)
または
std::realloc
の呼び出しによって
ptr
と等しいポインタが返されていない場合、動作は未定義です。
std::free
が返った後、ポインタ
ptr
を通じてアクセスが行われる場合(別のアロケーション関数が
ptr
と等しいポインタ値を返した場合を除く)、動作は未定義です。
|
以下の関数はスレッドセーフであることが要求されます:
特定の記憶単位を割り当てまたは解放するこれらの関数の呼び出しは、単一の全順序で発生し、各解放呼び出しはこの順序における次の割り当て(もしあれば)に対して 先行発生 します。 |
(C++11以降) |
目次 |
パラメータ
| ptr | - | 解放するメモリへのポインタ |
戻り値
(なし)
注記
この関数は、特殊ケースを減らすために(何も行わずに)ヌルポインタを受け入れます。アロケーションが成功するかどうかにかかわらず、アロケーション関数によって返されたポインタは
std::free
に渡すことができます。
例
#include <cstdlib> int main() { int* p1 = (int*)std::malloc(10 * sizeof *p1); std::free(p1); // 割り当てられたすべてのポインタは解放されなければならない int* p2 = (int*)std::calloc(10, sizeof *p2); int* p3 = (int*)std::realloc(p2, 1000 * sizeof *p3); if (!p3) // p3がnullの場合、reallocが失敗したことを意味し、p2を解放しなければならない std::free(p2); std::free(p3); // p3がnullかどうかに関わらず、p3は解放可能 }
関連項目
|
Cドキュメント
for
free
|