名前空間
変種
操作

std::free

提供: cppreference.com
< cpp‎ | memory‎ | c
 
 
ユーティリティライブラリ
汎用ユーティリティ
日付と時間
関数オブジェクト
書式化ライブラリ (C++20)
(C++11)
関係演算子 (C++20で非推奨)
整数比較関数
(C++20)
スワップと型操作
(C++14)
(C++11)
(C++11)
(C++11)
(C++17)
一般的な語彙の型
(C++11)
(C++17)
(C++17)
(C++17)
(C++17)

初等文字列変換
(C++17)
(C++17)
 
動的メモリ管理
スマートポインタ
(C++11)
(C++11)
(C++11)
(C++17未満)
(C++11)
アロケータ
メモリリソース
未初期化記憶域
ガベージコレクションサポート
その他
(C++20)
(C++11)
(C++11)
C のライブラリ
free
低水準のメモリ管理
 
ヘッダ <cstdlib> で定義
void free( void* ptr );

以前に std::mallocstd::callocstd::aligned_alloc (C++17以上) または std::realloc によって確保された空間を解放します。

ptr がヌルポインタの場合、この関数は何もしません。

ptr の値が以前に std::mallocstd::callocstd::aligned_alloc (C++17以上) または std::realloc によって返された値と等しくない場合、動作は未定義です。

ptr の参照するメモリ領域がすでに解放されている場合、つまり、引数として ptr を使用して std::free または std::realloc がすでに呼ばれ、その後 ptr と等しいポインタを返した std::mallocstd::callocstd::aligned_alloc (C++17以上) または std::realloc の呼び出しがない場合、動作は未定義です。

std::free が戻った後、ポインタ ptr を通してアクセスが行われた場合、動作は未定義です (別の確保関数が ptr と等しいポインタ値を返した場合を除きます)。

以下の関数はスレッドセーフであることが要求されます。

記憶域の特定の単位を確保または解放するこれらの関数の呼び出しは単一の全順序で発生し、そのような解放の呼び出しそれぞれはこの順序における次の確保 (もしあれば) に対して先行発生します。

(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 not null means p2 was freed by std::realloc
       std::free(p3);
    else // p3 null means p2 was not freed
       std::free(p2);
}


[編集] 関連項目