指针的内存分配失败
Memory allocation failure with pointers
我已经搜索了著名的错误"std::bad_alloc",但我找不到任何像我这样的情况。我已经用 c++ 实现了一个代码(准确地说:在 MinGW 中运行,在 Win 7 Prof 中使用 Eclipse),并且代码对于少量类实例运行得很好,但是当类实例的数量达到 10509 以上时,会出现来自 Windows 的错误,然后 eclipse 显示"std::bad_alloc"错误。我正在使用"new"来构建新的类实例,每个类都需要两个指针和三个类型为"long int"、"string"和"int"的变量。我之前无法解构任何实例构建,因为我稍后需要它们作为节点在程序的其他部分进行评估。但是,无论如何,我已经将类解构器添加到类定义中,并且它们肯定设置正确。我确定程序何时以及通过哪个命令停止,这正是在尝试添加第 10509 个类实例时构造 10510 个类实例之后。
所以我想知道是否可以扩展保留内存以分配新的类实例?
代码太长,无法粘贴到此处。感谢您的任何帮助!
首先,new
工作的动态内存通常占用进程中所有剩余的可用内存。没有办法进一步扩展它。最初有多少动态内存取决于程序有多少非动态数据。如果不了解您的程序,就无法说。通过减小非动态数据的大小,您可以有效地"扩展"可用作动态内存的内容。
其次,在具有虚拟内存的平台上,实际上不可能"内存不足"(假设您有一个健康的交换文件)。但是,可能会耗尽进程地址空间。同样,如果在仅分配10509
对象后用完了地址空间,则一定是其他问题。
第三,10509
看起来是一个非常低的数字。因此,如果在分配如此少的对象后内存不足,则可能意味着对象本身相当大。您的对象有多大?
错误可能是由堆损坏触发的,这意味着即使技术上仍有充足的可用内存,分配也会失败。如果不了解您的代码,就无法说。
- 当需要超过16GB的连续内存时,内存分配失败
- 分配给转换运算符失败-C++
- 在构造函数中分配内存失败是如何冒泡的
- CudaMalloc 在分配内存时失败
- C++ 错误的分配应用程序失败
- 用户DLL/EXE中的堆分配失败
- 如何防止连续使用"new"时分配失败时内存泄漏
- 无论如何如何重新分配内存,即使 realloc() 在 c++ 中失败
- 使用 QAbstractListModel 分配 QML 布尔属性失败
- OpenCv C++,将传入的垫子分配给函数中的垫子失败
- 在分配的结构中初始化 std::map 在 Windows 上失败
- 分配失败了文件*类
- 动态分配缓冲空间为二维数组 - 为什么失败
- C++内存分配失败(使用 new & delete)
- 合并排序逻辑分配内存失败
- 如何创建随机内存分配失败
- 为什么将boost::move()的返回值分配给非常数引用在C++0x模式下失败,但在C++03模式下有效
- 为什么 2^80 字节的内存分配不会失败?
- 如果我的C++“新”内存分配失败,如何找出返回值
- 复制构造函数失败..重载,动态分配