假設我有兩個代碼示例用於創建10個元件的整數數組:malloc()和realloc()有什麼區別?
int *pi = (int*) 0x000; //base ADDRESS of OS
realloc(pi,10);
,另一個是正常寫入的一個,即:
int *pi;
pi=(int*) malloc(10*sizeof(int));
現在,我的問題是:第一種類型的任務是合法的,但沒有使用。爲什麼? 他們之間有什麼區別?
假設我有兩個代碼示例用於創建10個元件的整數數組:malloc()和realloc()有什麼區別?
int *pi = (int*) 0x000; //base ADDRESS of OS
realloc(pi,10);
,另一個是正常寫入的一個,即:
int *pi;
pi=(int*) malloc(10*sizeof(int));
現在,我的問題是:第一種類型的任務是合法的,但沒有使用。爲什麼? 他們之間有什麼區別?
注:相當於調用realloc(pi, 10 * sizeof(int))
的realloc的文檔解釋呼叫,在特定的情況下,是同一個malloc:
若ptr爲NULL,realloc的()是與調用malloc()以獲得大小字節相同。
您不能在指針上首次使用realloc。 首先你創建一個指針,然後你可以用一個內存地址來分配它。 – Raon
realloc
可能擴展,縮小或不改變分配的內存段。根據實現情況,它可能比分配新塊和複製舊內容(可能部分)和刪除舊內容更有效。
除此之外,realloc
超過空指針應該具有與malloc
完全相同的結果和性能。
realloc()
函數想要它的第一個參數是一個指針,它是以前發給malloc()
的調用獲得的。它分配一個新的內存塊並釋放以前分配的內存塊。
如果您通過NULL
到realloc()
,它的行爲方式與malloc()
相同。
0x000
不是OS的基址,它是整數0
,編譯器會將它轉換爲空指針。所以第一段代碼是一樣的:
int *pi = realloc(NULL,10);
它的
int *pi = malloc(10);
請注意,這是不一樣的,因爲缺乏sizeof(int)
你的第二個例子相同的效果。
在這種情況下,人們通常不會使用realloc
的原因很簡單,就是malloc
可以完美地完成這項工作。
首先它不是[tag:C++]特定的。 –
有趣的是,它似乎非常接近上述問題的完全重複,看起來像複製! – codeling