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 (since 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); // 할당된 모든 포인터는 해제되어야 함
    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 여부와 관계없이 해제할 수 있음
}

참고 항목

C 문서 for free