命名空间
变体
操作

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::mallocstd::callocstd::aligned_alloc(C++17 起)std::realloc 分配的空间。

如果 ptr 是空指针,则函数不执行任何操作。

如果 ptr 的值不等于先前由 std::mallocstd::callocstd::aligned_alloc(C++17 起)std::realloc 返回的值,则行为未定义。

如果 ptr 所引用的内存区域已被解除分配,即 std::freestd::realloc 已将 ptr 作为参数调用,并且之后没有调用 std::mallocstd::callocstd::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 的文档