?
Dokumen ini menggunakan Manual laman web PHP Cina Lepaskan
在頭文件<stdlib.h>中定義 | ||
---|---|---|
void * realloc(void * ptr,size_t new_size); |
重新分配給定的內存區(qū)域。它必須預先分配malloc()
,calloc()
或realloc()
尚未釋放與free
或呼叫realloc
。否則,結果是不確定的。
重新分配由以下兩者之一完成:
a)ptr
如有可能,擴大或縮小指定的現(xiàn)有地區(qū)。該地區(qū)的內容保持不變,直至新舊尺寸中的較小者。如果區(qū)域展開,則數(shù)組新部分的內容未定義。
b)分配一個大小為new_size
字節(jié)的新內存塊,復制大小等于新舊大小較小者的內存區(qū)域,并釋放舊塊。
如果沒有足夠的內存,則舊的內存塊不會被釋放,并返回空指針。
如果ptr
是NULL
,則行為與調用malloc
(new_size
)相同。
如果new_size
為零,則行為是實現(xiàn)定義的(可能會返回空指針(在這種情況下,可能會釋放或不釋放舊的內存塊),或者可能會返回一些可能不用于訪問存儲的非空指針)。
realloc是線程安全的:它的行為就像訪問通過其參數(shù)可見的內存位置,而不是任何靜態(tài)存儲。先前調用free或realloc來釋放內存區(qū)域的同步 - 調用任何分配函數(shù),包括分配相同或部分同一區(qū)域內存的realloc。在通過釋放函數(shù)訪問內存之后以及在通過重新分配訪問內存之前,會發(fā)生此同步。所有分配和解除分配功能在內存的每個特定區(qū)域都有一個總的順序。 | (自C11以來) |
---|
PTR | - | 指向要重新分配的內存區(qū)域的指針 |
---|---|---|
new_size | - | 數(shù)組的新大小 |
成功時,將指針返回到新分配的內存的開始位置。返回的指針必須用free()
或來解除分配realloc()
。原始指針ptr
無效,并且對它的任何訪問都是未定義的行為(即使重新分配就地)。
失敗時,返回一個空指針。原始指針ptr
仍然有效,可能需要使用free()
or 取消分配realloc()
。
從C11 DR 400開始不支持零大小。
最初(在C89中),增加了對零大小的支持以適應如下代碼。
OBJ *p = calloc(0, sizeof(OBJ)); // "zero-length" placeholder...while(1) { p = realloc(p, c * sizeof(OBJ)); // reallocations until size settles ... // code that may change c or break out of loop}
#include <stdio.h>#include <stdlib.h> int main(void){ int *pa = malloc(10 * sizeof *pa); // allocate an array of 10 int if(pa) { printf("%zu bytes allocated. Storing ints: ", 10*sizeof(int)); for(int n = 0; n < 10; ++n) printf("%d ", pa[n] = n); } int *pb = realloc(pa, 1000000 * sizeof *pb); // reallocate array to a larger size if(pb) { printf("\n%zu bytes allocated, first 10 ints are: ", 1000000*sizeof(int)); for(int n = 0; n < 10; ++n) printf("%d ", pb[n]); // show the array free(pb); } else { // if realloc failed, the original pointer needs to be freed free(pa); }}
輸出:
40 bytes allocated. Storing ints: 0 1 2 3 4 5 6 7 8 94000000 bytes allocated, first 10 ints are: 0 1 2 3 4 5 6 7 8 9
C11標準(ISO / IEC 9899:2011):
7.22.3.5 realloc函數(shù)(p:349)
C99標準(ISO / IEC 9899:1999):
7.20.3.4 realloc函數(shù)(p:314)
C89 / C90標準(ISO / IEC 9899:1990):
4.10.3.4 realloc函數(shù)