2013-10-17 77 views
0

假設我有兩個代碼示例用於創建10個元件的整數數組:malloc()和realloc()有什麼區別?

int *pi = (int*) 0x000; //base ADDRESS of OS 
    realloc(pi,10); 

,另一個是正常寫入的一個,即:

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

現在,我的問題是:第一種類型的任務是合法的,但沒有使用。爲什麼? 他們之間有什麼區別?

+0

首先它不是[tag:C++]特定的。 –

+4

有趣的是,它似乎非常接近上述問題的完全重複,看起來像複製! – codeling

回答

4

注:相當於調用realloc(pi, 10 * sizeof(int))

的realloc的文檔解釋呼叫,在特定的情況下,是同一個malloc:

若ptr爲NULL,realloc的()是與調用malloc()以獲得大小字節相同。

+0

您不能在指針上首次使用realloc。 首先你創建一個指針,然後你可以用一個內存地址來分配它。 – Raon

2

realloc可能擴展,縮小或不改變分配的內存段。根據實現情況,它可能比分配新塊和複製舊內容(可能部分)和刪除舊內容更有效。

除此之外,realloc超過空指針應該具有與malloc完全相同的結果和性能。

0

realloc()函數想要它的第一個參數是一個指針,它是以前發給malloc()的調用獲得的。它分配一個新的內存塊並釋放以前分配的內存塊。

如果您通過NULLrealloc(),它的行爲方式與malloc()相同。

1

0x000不是OS的基址,它是整數0,編譯器會將它轉換爲空指針。所以第一段代碼是一樣的:

int *pi = realloc(NULL,10); 

它的

int *pi = malloc(10); 

請注意,這是不一樣的,因爲缺乏sizeof(int)你的第二個例子相同的效果。

在這種情況下,人們通常不會使用realloc的原因很簡單,就是malloc可以完美地完成這項工作。