命名空间
变体
操作

std::free

来自 cppreference.com
< cpp‎ | memory‎ | c
 
 
实用工具库
语言支持
类型支持 (基本类型,RTTI)
库特性测试宏 (C++20)
动态内存管理
程序实用工具
协程支持 (C++20)
可变参数函数
调试支持
(C++26)
三路比较
(C++20)
(C++20)(C++20)(C++20)
(C++20)(C++20)(C++20)
通用实用工具
日期和时间
函数对象
格式化库 (C++20)
(C++11)
关系运算符 (在 C++20 中已弃用)
整数比较函数
(C++20)(C++20)(C++20)   
(C++20)
交换类型操作
(C++14)
(C++11)
(C++11)
(C++11)
(C++17)
通用词汇类型
(C++11)
(C++17)
(C++17)
(C++17)
(C++11)
(C++17)
(C++23)
基本字符串转换
(C++17)
(C++17)

 
动态内存管理
未初始化内存算法
受约束的未初始化内存算法
分配器
垃圾回收支持
(C++11)(直到 C++23)
(C++11)(直到 C++23)
(C++11)(直到 C++23)
(C++11)(直到 C++23)
(C++11)(直到 C++23)
(C++11)(直到 C++23)



 
定义在头文件 <cstdlib>
void free( void* ptr );

释放之前通过 std::mallocstd::calloc, std::aligned_alloc(自 C++17 起)std::realloc 分配的空间。

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

如果 ptr 的值不等于之前通过 std::mallocstd::calloc, std::aligned_alloc(自 C++17 起)std::realloc 返回的值,则行为未定义。

如果 ptr 所指向的内存区域已经被释放,则行为未定义,即,std::freestd::realloc 已经使用 ptr 作为参数被调用,并且没有对 std::mallocstd::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 文档free