std::free
来自 cppreference.cn
定义于头文件 <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 documentation 关于 free 的文档
|