?
このドキュメントでは、 php中國語ネットマニュアル リリース
在頭文件<stdlib.h>中定義 | ||
---|---|---|
void free(void * ptr); |
將釋放的空間以前分配的malloc()
,calloc()
,aligned_alloc
,(因?yàn)镃11)或realloc()
。
如果ptr
是空指針,則該函數(shù)不執(zhí)行任何操作。
如果值的行為是不確定ptr
不等于一個(gè)返回值早些時(shí)候malloc()
,calloc()
,realloc()
,或者aligned_alloc()
(因?yàn)镃11)。
如果內(nèi)存區(qū)提到了行為未定義ptr
已釋放,也就是說,free()
或者realloc()
已經(jīng)被調(diào)用ptr
的參數(shù)并沒有來電malloc()
,calloc()
或realloc()
導(dǎo)致指針等于ptr
算賬。
如果在free()
返回之后,行為是未定義的,則通過指針進(jìn)行訪問ptr
(除非另一個(gè)分配函數(shù)發(fā)生導(dǎo)致指針值等于ptr
)。
free是線程安全的:它的行為就像訪問通過其參數(shù)可見的內(nèi)存位置,而不是任何靜態(tài)存儲。釋放一個(gè)內(nèi)存區(qū)域的釋放調(diào)用將同步 - 調(diào)用任何后續(xù)分配函數(shù),該函數(shù)將分配相同或部分相同區(qū)域的內(nèi)存。在通過釋放函數(shù)訪問內(nèi)存之后以及在通過分配函數(shù)訪問內(nèi)存之前,會發(fā)生此同步。所有分配和解除分配功能在內(nèi)存的每個(gè)特定區(qū)域都有一個(gè)總的順序。 | (自C11以來) |
---|
PTR | - | 指向要釋放的內(nèi)存的指針 |
---|
(none).
注釋
該函數(shù)接受(并且不執(zhí)行任何操作)空指針以減少特殊框架的數(shù)量。無論分配是否成功,分配函數(shù)返回的指針都可以傳遞給它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標(biāo)準(zhǔn)(ISO / IEC 9899:2011):
7.22.3.3自由功能(p:348)
C99標(biāo)準(zhǔn)(ISO / IEC 9899:1999):
7.20.3.2自由功能(p:313)
C89 / C90標(biāo)準(zhǔn)(ISO / IEC 9899:1990):
4.10.3.2自由功能