Scroll to navigation

std::free(3) C++ Standard Libary std::free(3)

NAME

std::free - std::free

Synopsis


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:


* The library versions of operator new and operator delete
* User replacement versions of global operator new and operator
delete
* std::calloc, std::malloc, std::realloc, (since C++11)
std::aligned_alloc
(since C++17), std::free


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.

Parameters


ptr - pointer to the memory to deallocate

Return value


(none)

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.

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

See also

2022.07.31 http://cppreference.com