Namespaces
Variants

std:: free

From cppreference.net
< cpp ‎ | memory ‎ | c
Memory management library
( exposition only* )
Allocators
Uninitialized memory algorithms
Constrained uninitialized memory algorithms
Memory resources
Uninitialized storage (until C++20)
( until C++20* )
( until C++20* )
( until C++20* )

Garbage collector support (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
ヘッダーで定義 <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は解放可能
}

関連項目