簡體   English   中英

malloc和realloc之間的區別?

[英]Difference between malloc and realloc?

假設我有兩個代碼示例用於創建10個元素的整數數組:

int *pi = (int*)0; 
realloc(pi,10);

另一個是正常寫的,即:

int *pi;
pi= malloc(10*sizeof(int));

現在,我的問題是:第一種類型的轉讓是合法的,但沒有使用。 為什么,雖然我可能會得到我選擇的起始位置?
使用常量初始化指針是合法的但不使用。 為什么?

傳遞NULLrealloc等同於malloc 如果您在某種循環中重新分配並且不希望在第一次分配時出現特殊情況,則NULL調用可能很有用。


雖然我們正在使用它,但使用malloc和realloc的相當標准的方法是:

int* p;
p = malloc(10 * sizeof(int)); //Note that there's no cast
//(also, it could just be int* p = malloc(...);)

int* np = realloc(p, 15 * sizeof(int));
//Note that you keep the old pointer -- this is in case the realloc fails

作為切向的一面:歷史是您在不同行上看到聲明和作業的主要原因。 在舊版本的C中,聲明必須首先出現在函數中。 這意味着即使你的函數在20行之前沒有使用變量,你也必須在頂部聲明。

由於您通常不知道另外20行中未使用的變量的值應該是什么,因此您無法始終將其初始化為任何有意義的值,因此您將留下聲明並且在您的頂部沒有任何作業功能。

在C99 / C11中,您不必在范圍頂部聲明變量。 實際上,通常建議將變量定義為盡可能接近其使用。

C要求傳遞給realloc的指針必須是從malloccallocrealloc函數調用(或空指針)獲得的指針。

第一個賦值是合法的,因為傳遞給realloc()的指針必須先通過某種類型的賦值給你。 (此外,你忽略了它的返回值,你必須永遠不要做分配!)

malloc()是為某些固定大小的東西創建一個緩沖區。 realloc()是返回一個緩沖區並獲得另一個(大概)不同的大小 - 它可能會返回你正在使用的相同緩沖區。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM