std:: free
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
定义于头文件
<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
相等的指针值),则行为是未定义的。
|
以下函数要求是线程安全的:
对这些函数分配或释放特定存储单元的调用以单一全序方式发生,且每个这样的释放调用 先于 该顺序中的下一个分配调用(如果存在)。 |
(since C++11) |
目录 |
参数
| ptr | - | 指向要释放内存的指针 |
返回值
(无)
注释
该函数接受(但不处理)空指针以减少特殊情况的数量。无论分配成功与否,分配函数返回的指针都可以传递给
std::free
。
示例
#include <cstdlib> int main() { int* p1 = (int*)std::malloc(10 * sizeof *p1); std::free(p1); // 每个已分配的指针都必须被释放 int* p2 = (int*)std::calloc(10, sizeof *p2); int* p3 = (int*)std::realloc(p2, 1000 * sizeof *p3); if (!p3) // p3为空表示realloc失败,此时必须释放p2 std::free(p2); std::free(p3); // 无论p3是否为空都可以安全释放 }
参见
|
C 文档
关于
free
|