2012-05-10 59 views
1

有人可以解釋realloc中的第二個參數是什麼,因爲我無法找到一種方法來測試它。c realloc,尺寸真的意味着什麼

因此,假設我們有這樣的事情

int *p = malloc(sizeof(int)); //we have just enough space to store single int value 
現在如果我要存儲在第2個INT值

我需要發送到ReAlloc如果作爲第二個參數塊的2 * sizeof(int)新的大小或sizeof(int)因爲它需要爲INT

大小在情況下,我應該向ReAlloc如果在這種情況下2 * sizeof(int)新塊的總價值擴展內存,會是什麼的情況下,做我送它只是sizeof(int),只是返回原來的指針和內存內什麼都不做或者是其他東西?

+0

這取決於實施。它可能什麼都不做,並返回舊的指針,或者它可能會分配新的內存和複製。 –

回答

0

您想告訴realloc分配的新總大小。所以從你的例子中,2 * sizeof(int)

你的第二個問題是不完全清楚,所以我會盡力將所有這些片段包裝成一個句子。如果調用與原始malloc調用大小相同的realloc,則需要返回原始指針還是將數據移動到(實現定義的)更方便的位置;如果您嘗試在您只請求一個int的空間中存儲兩個int,那麼您觸發了未定義的行爲。這可能破壞其他分配的內存(導致計算錯誤的結果)或(更可能),這可能破壞的malloc自己的記賬數據(可能是你的程序將與段錯誤中止稍晚時的malloc實際需要看數據上。

3

第二個參數是在字節的內存塊(共新大小)的新的大小。如果你想室2個整數,你會使用2 * sizeof(int)

只是返回原來的指針和內存中的什麼也不做別的東西?

這不是由S保證pecifications。許多實現只會返回原始指針,但它們可以輕鬆地移動它。對於2個整數,您不會獲得足夠大的新內存分配,但是,只有存儲位置的原始數據值足夠大,可用於sizeof(int)