std::free
来自 cppreference.com
定义在头文件 <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)。
以下函数需要是线程安全的
对这些函数的调用,它们分配或释放特定存储单元,发生在一个单一的总顺序中,并且每个这样的释放调用 happens-before 此顺序中的下一个分配(如果有)。 |
(自 C++11 起) |
内容 |
[编辑] 参数
ptr | - | 指向要释放的内存的指针 |
[编辑] 返回值
(无)
[编辑] 说明
该函数接受(并且不对)空指针进行任何操作,以减少特殊情况的数量。无论分配是否成功,分配函数返回的指针都可以传递给 std::free
。
[编辑] 示例
运行这段代码
#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. }
[编辑] 参见
C 文档 为 free
|