2012-02-20 59 views
3

請告訴我,是否可以使用malloc來增加現有的數組的大小? (沒有分配一個新的數組,然後做memcpy)如果是,如何?是否可以使用malloc來增加現有數組的大小?

+0

如同你自己:如果數組旁邊的空間已經分配給別的東西,怎麼會這樣呢? – delnan 2012-02-20 19:45:51

+0

@delnan參見http://stackoverflow.com/a/9367362/901059我已經指出爲什麼這不起作用。 – mydogisbox 2012-02-20 20:03:42

+0

@mydogisbox:我知道,因此我建議OP。 – delnan 2012-02-20 20:06:42

回答

13

請參閱realloc。請注意,它可能會更改數組的地址,因此請確保分配返回值。

+0

如果無法調整數組大小,它可能會返回NULL,因此您要確保將返回值分配給* different *變量並測試NULL。 – 2012-02-20 19:53:14

+0

確實。 'malloc'同樣適用 - 我想知道有多少程序檢查_that_的返回值。 – 2012-02-20 19:54:29

4

不,數組需要連續的內存,並且無法保證當前分配後的內存空閒。正如@James McLaughlin指出的那樣,你可以使用realloc來創建一個新的數組,然後做一個memcopy,但它本質上是一樣的。

+0

看來,只有當內存對象的新大小需要移動對象時(例如,如果關閉內存字段已被某個程序佔用),它纔會和malloc + memcpy執行相同的操作。我使用小陣列(幾千字節),因此在大多數情況下,運動不是必需的。 – 2012-02-20 19:51:18

+1

的確如此,但我正在處理您提到的具體問題,涉及增加陣列的大小,而不是簡單地將其分配到新的位置。 – mydogisbox 2012-02-20 19:52:38

+1

如果你使用的是C++,那麼我會建議你簡單地使用stl向量(假設你沒有性能方面的考慮,這使得它不可行),因爲它以與realloc幾乎相同的方式處理你的調整大小。 – mydogisbox 2012-02-20 19:56:36

相關問題