命名空间
变体
操作

std::free

来自 cppreference.cn
< cpp‎ | memory‎ | c
 
 
内存管理库
(仅为说明目的*)
未初始化内存算法
(C++17)
(C++17)
(C++17)
受约束的未初始化
内存算法
C 库
free


分配器
内存资源
垃圾回收支持
(C++11)(直到 C++23)
(C++11)(直到 C++23)
(C++11)(直到 C++23)
(C++11)(直到 C++23)
(C++11)(直到 C++23)
(C++11)(直到 C++23)
未初始化存储
(直到 C++20*)
(直到 C++20*)
显式生命周期管理
 
定义于头文件 <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::freestd::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