首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

free

在头文件<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是线程安全的:它的行为就像访问通过其参数可见的内存位??置,而不是任何静态存储。释放一个内存区域的释放调用将同步 - 调用任何后续分配函数,该函数将分配相同或部分相同区域的内存。在通过释放函数访问内存之后以及在通过分配函数访问内存之前,会发生此同步。所有分配和解除分配功能在内存的每个特定区域都有一个总的顺序。

(自C11以来)

参数

PTR

-

指向要释放的内存的指针

返回值

(none).

注释

该函数接受(并且不执行任何操作)空指针以减少特殊框架的数量。无论分配是否成功,分配函数返回的指针都可以传递给它free()

代码语言:javascript
复制
#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);
}

参考

  • C11标准(ISO / IEC 9899:2011):
    • 7.22.3.3自由功能(p:348)
  • C99标准(ISO / IEC 9899:1999):
    • 7.20.3.2自由功能(p:313)
  • C89 / C90标准(ISO / IEC 9899:1990):
    • 4.10.3.2自由功能

扫码关注腾讯云开发者

领取腾讯云代金券

http://www.vxiaotou.com