free

来自cppreference.com
< c‎ | memory
定义于头文件 <stdlib.h>
void free( void* ptr );

归还之前由malloc()calloc()aligned_alloc, (C11起)realloc()分配的空间。

ptr是空指针,则函数不进行操作。

ptr的值不等于之前由malloc()calloc()realloc()aligned_alloc() (C11起)返回的值,则行为未定义。

ptr所引用的内存区域已经被归还,则行为未定义,即是说free()realloc()已经以ptr为参数被调用,并且后来没有对malloc()calloc()realloc()的调用以ptr为结果。

若在free()返回后通过指针ptr访问内存,则行为未定义(除非另一个分配函数恰好返回等于ptr的值)。

free是线程安全的:它表现得如同只访问通过其参数可见的内存区域,而非通过任何静态存储。

free归还内存区域的调用,与任何令分配函数分配相同或部分相同区域的后续调用同步。 这种同步会在任何通过归还函数的内存访问之后,并在任何通过分配函数的内存访问之前发生。所有操作每块特定内存区域的分配及归还函数拥有一个单一完整的顺序。

(C11起)

目录

[编辑] 参数

ptr - 指向要归还的内存的指针

[编辑] 返回值

(无)

[编辑] 注意

此函数接收空指针(并对其不处理)以减少特例的数量。不管分配成功与否,分配函数返回的指针都能传递给free()

[编辑] 示例

#include <stdlib.h>
 
int main(void)
{
    int *p1 = malloc(10*sizeof *p1);
    free(p1); // 每一个分配的指针都要被释放
 
    int *p2 = calloc(10, sizeof *p2);
    int *p3 = realloc(p2, 1000*sizeof *p3);
    if(p3) // p3非空表示p2被realloc释放
       free(p3);
    else // p3空表示p2未被释放
       free(p2);
}


[编辑] 参考

  • C11 standard (ISO/IEC 9899:2011):
  • 7.22.3.3 The free function (p: 348)
  • C99 standard (ISO/IEC 9899:1999):
  • 7.20.3.2 The free function (p: 313)
  • C89/C90 standard (ISO/IEC 9899:1990):
  • 4.10.3.2 The free function

[编辑] 参阅

freeC++文档