Namespaces
Variants

std:: free

From cppreference.net
< cpp ‎ | memory ‎ | c
Memory management library
( exposition only* )
Allocators
Uninitialized memory algorithms
Constrained uninitialized memory algorithms
Memory resources
Uninitialized storage (until C++20)
( until C++20* )
( until C++20* )
( until C++20* )

Garbage collector support (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
定义于头文件 <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