free
來自 cppreference.com
在標頭檔案 <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
|