我知道C++陣列可重新分配(擴)使用realloc()
如果存儲器已經經由malloc()
或calloc()
分配。我的問題是,如何擴展C++中的數組,其內存已通過new
運算符分配?
回答
你不能 - 這就是爲什麼你在C++中使用std::vector<>
。
如果你想這樣做,你必須分配一個新的數組(通過new
),然後複製舊的項目(例如std::copy
),然後delete[]
前一個數組。
只需使用std::vector
- 讓它做所有的東西你...
對於std :: vector。 – 2012-03-06 15:14:53
「然後複製舊的項目」 - 或移動它們。 – 2012-03-06 15:36:03
使用::std::vector
。
有關更多詳細信息,請參閱this question或this question。
一般而言,即使存儲被分配了malloc
,C++數組也不能被重新分配爲realloc
。 malloc
不會給你陣列。它給出了可用存儲的指針。這裏有一個微妙的區別。
對於POD類型,可用存儲和實際對象之間幾乎沒有區別。但對於非POD類型,可用的存儲和對象是完全不同的東西。
realloc
爲您提供了大部分可用存儲空間。它操縱存儲不是對象。這對於POD類型可能工作得很好,但對於其他類型而言,這是一種災難處方。
從技術上講,只有在已經通過malloc()分配了內存的情況下,纔有可能使用'calloc()'分配的realloc()或者''realloc()'來擴展數組。 – 2012-03-06 15:35:36
@amalantony哦,'calloc'也一樣。問題在於'realloc'本身。它不關心對象,只關心存儲。 – 2012-03-06 15:37:21
@amal:'malloc'和'calloc'之間的區別與Martinho在這裏所說的完全無關。你不能'重新分配'non-POD對象,因爲你不能將它們逐字節複製,這就是所有'realloc'被定義的。即使在C語言中,如果你的對象包含指向它們自己或彼此的指針,那麼你就不能「重新分配」它們,因爲地址不再正確。 C++只是增加了對非POD類的警告,實現可能會自動插入類似的東西。 – 2012-03-06 15:37:29
- 1. C++類數組內存重新分配
- 2. 數組重新分配C++
- 3. 在C中重新分配內存
- 4. C中的數組的內存分配
- 5. 用於數組的C++內存分配
- 6. 指針數組的C++內存分配
- 7. 內存重新分配
- 8. 內存不重新分配
- 9. 內存分配/重新分配問題
- 10. 內存重新分配使用的std ::矢量重新分配
- 11. C++分配內存數組struct struc
- 12. 重新分配數組可釋放它所使用的內存?
- 13. 轉換分配/重新分配從C++多維數組到C
- 14. 如何爲2D浮點數組重新分配內存?
- 15. 如何爲2維數組重新分配內存?
- 16. 動態內存/重新分配字符串數組
- 17. 新的和malloc(C++)未能分配內存。如何修復/重新分配?
- 18. 內存分配給數組
- 19. 爲數組分配內存
- 20. numpy數組內存分配
- 21. 重新分配**數組
- 22. C++新操作符分配新內存
- 23. C函數分配內存
- 24. 在C#中重新分配數組時,內存會發生什麼變化?
- 25. C++動態分配二維數組過度分配內存?
- 26. C++新的內存分配碎片
- 27. 重新分配的內存少於最初的指針C
- 28. 內存分配C++
- 29. 內存分配,C++
- 30. C內存分配
malloc/realloc是C庫調用 - 儘管它們可以在C++中使用,但它們通常應該避免使用,因爲C++具有更強大的處理動態數組的方式等。 – 2012-03-06 15:17:35