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 引用的内存区域已被解分配,即,已使用 ptr 作为参数调用过 std::free
或 std::realloc,并且之后没有调用 std::malloc, std::calloc, std::aligned_alloc(自 C++17 起), 或 std::realloc 导致指针等于 ptr,则行为未定义。
如果在 std::free
返回后,通过指针 ptr 进行访问(除非另一个分配函数恰好导致指针值等于 ptr),则行为未定义。
以下函数需要是线程安全的
对这些函数的调用,用于分配或解分配特定存储单元,发生在单一的总顺序中,并且每个这样的解分配调用 先于 此顺序中的下一个分配(如果有)。 |
(自 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
|