free
来自 cppreference.cn
在头文件 <stdlib.h> 中定义 |
||
void free( void *ptr ); |
||
释放先前由 malloc()、calloc()、aligned_alloc(),(C11 起) 或 realloc() 分配的空间。
如果 ptr
是空指针,则函数不做任何事情。
如果 ptr
的值不等于之前由 malloc()、calloc()、realloc() 或 aligned_alloc()(C11 起) 返回的值,则行为未定义。
如果 ptr
所指的内存区域已经被释放,即 free()
、free_sized()、free_aligned_sized()(C23 起) 或 realloc() 已经以 ptr
作为参数被调用,并且之后没有调用 malloc()、calloc()、realloc() 或 aligned_alloc()(C11 起) 导致返回与 ptr
相等的指针,则行为未定义。
如果在 free()
返回后通过指针 ptr
进行访问,则行为未定义(除非另一个分配函数恰好返回了与 ptr
相等的指针值)。
对 |
(C11 起) |
目录 |
[编辑] 参数
ptr | - | 指向要解除分配的内存的指针 |
[编辑] 返回值
(无)
[编辑] 注意
函数接受空指针(并对其不做任何操作),以减少特殊情况处理。无论分配是否成功,分配函数返回的指针都可以传递给 free()
。
[编辑] 示例
运行此代码
#include <stdlib.h> int main(void) { int *p1 = malloc(10*sizeof *p1); free(p1); // every allocated pointer must be freed int *p2 = calloc(10, sizeof *p2); int *p3 = realloc(p2, 1000*sizeof *p3); if(p3) // p3 not null means p2 was freed by realloc free(p3); else // p3 null means p2 was not freed free(p2); }
[编辑] 参考
- C23 标准 (ISO/IEC 9899:2024)
- 7.24.3.3 free 函数 (p: 365)
- C17 标准 (ISO/IEC 9899:2018)
- 7.22.3.3 free 函数 (p: 254)
- C11 标准 (ISO/IEC 9899:2011)
- 7.22.3.3 free 函数 (p: 348)
- C99 标准 (ISO/IEC 9899:1999)
- 7.20.3.2 free 函数 (p: 313)
- C89/C90 标准 (ISO/IEC 9899:1990)
- 4.10.3.2 free 函数
[编辑] 另请参阅
分配内存 (函数) | |
(C23) |
释放之前分配的指定大小的内存 (函数) |
(C23) |
释放之前分配的指定大小且对齐的内存 (函数) |
C++ documentation for free
|