free
free
在头文件 | | |
---|---|---|
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()
。
例
#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):