Namespaces
Variants
Actions

std::free

From cppreference.com
< cpp‎ | memory‎ | c
 
 
Memory management library
(exposition only*)
Uninitialized storage (until C++20)
(until C++20*)
(until C++20*)

(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)
 
Defined in header <cstdlib>
void free( void* ptr );

Deallocates the space previously allocated by std::malloc , std::calloc , std::aligned_alloc (since C++17), or std::realloc .

If ptr is a null pointer, the function does nothing.

The behavior is undefined if the value of ptr does not equal a value returned earlier by std::malloc , std::calloc , std::aligned_alloc (since C++17), or std::realloc .

The behavior is undefined if the memory area referred to by ptr has already been deallocated, that is, std::free or std::realloc has already been called with ptr as the argument and no calls to std::malloc , std::calloc , std::aligned_alloc (since C++17), or std::realloc resulted in a pointer equal to ptr afterwards.

The behavior is undefined if after std::free returns, an access is made through the pointer ptr (unless another allocation function happened to result in a pointer value equal to ptr).

The following functions are required to be thread-safe:

Calls to these functions that allocate or deallocate a particular unit of storage occur in a single total order, and each such deallocation call happens-before the next allocation (if any) in this order.

(since C++11)

[edit] Parameters

ptr - pointer to the memory to deallocate

[edit] Return value

(none)

[edit] Notes

The function accepts (and does nothing with) the null pointer to reduce the amount of special-casing. Whether allocation succeeds or not, the pointer returned by an allocation function can be passed to std::free.

[edit] Example

Run this code
#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.
}

[edit] See also

Retrieved from "https://en.cppreference.com/mwiki/index.php?title=cpp/memory/c/free&oldid=179183"

AltStyle によって変換されたページ (->オリジナル) /