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
(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
|