名前空間
変種
操作

std::free

From cppreference.com
< cpp‎ | memory‎ | c
 
 
メモリ管理ライブラリ
(説明用*)
未初期化メモリのアルゴリズム
(C++17)
(C++17)
(C++17)
制約付き未初期化
メモリアルゴリズム
Cライブラリ
free


アロケータ
メモリリソース
ガベージコレクションのサポート
(C++11)(C++23まで)
(C++11)(C++23まで)
(C++11)(C++23まで)
(C++11)(C++23まで)
(C++11)(C++23まで)
(C++11)(C++23まで)
未初期化ストレージ
(C++20まで*)
(C++20まで*)
明示的な生存期間管理
 
ヘッダ <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 がすでに呼び出されており、その後に std::mallocstd::callocstd::aligned_alloc(C++17以降)、またはstd::reallocptr と等しいポインタ値を返していなかった場合)、未定義の動作となります。

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.
}

[編集] 関連項目

English 日本語 中文(简体) 中文(繁體)