我知道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