新内存和重新分配内存
new and reallocating memory
new[]
不支持更改分配的内存大小,是吗?
例如,我用new[]
为缓冲区(char数组)分配了内存,我想获得额外的内存。
在这种情况下,我应该使用malloc
/realloc
吗?
new
不支持此功能。
可以使用new
、delete
和memcpy
手动模拟realloc
的行为。
顺便说一下,您应该始终使用相同的方法系列,即malloc
/realloc
/free
或new
/delete
,而不是将realloc
与new
/delete
混合使用。例如,请参阅Purify报告的FMM错误。
在不使用C保留malloc
和realloc
的情况下,在标准C++中最接近的方法是使用std::vector<char>
。它可以随时调整大小,如果底层存储被重新分配,内容将被自动复制。
使用std::vector
。你不必处理这些问题。
将malloc/realloc与new一起使用不是一个好主意。
new在应用后将不支持重新分配更多内存。
因此,一个好主意是创建一个具有额外内存的新缓冲区memcpy并删除旧缓冲区。然后指向这个新的缓冲区。
您应该使用std::vector。它可以调整大小。
相关文章:
- Win32编译器选项和内存分配
- 多个文件的内存分配错误"在抛出 'std :: bad_alloc' what (): std :: bad_alloc 的实例后终止调用" [C++]
- 当需要超过16GB的连续内存时,内存分配失败
- 尝试摆脱任何堆内存分配
- 以下代码执行哪种内存分配(动态或静态)?
- 开放 CV 中的动态内存分配,用于视频处理
- 为什么类和 main() 函数中也有动态内存分配
- 使用 NTAllocateVirtualMemory 和 GetProcAddress 的内存分配问题不起作用
- C++:矢量分配器行为、内存分配和智能指针
- 介于 [固定数组] 和 [带内存分配的指针] 之间的性能
- Linux C++ 中的页面对齐内存分配
- 整数内存分配/释放
- 将内存分配返回值强制转换为 TYPE 数组
- C++程序什么都不做,但瓦尔格林德显示内存分配
- 给定特定内存地址的数组的动态内存分配
- 如何完成内存分配
- 我刚刚了解了C++中的动态内存分配
- 在先前调用 string::find 后添加内存分配和内存集会导致它返回 npos.为什么?
- 对于堆上的页面对齐内存分配是否有任何优化或不同的 API?
- 无法删除布尔动态内存分配