c++ - 指针内存分配失败

标签 c++ class memory-management mingw bad-alloc

我搜索了著名的“std::bad_alloc”错误,但我找不到任何像我这样的案例。 我已经用 c++ 实现了一个代码(准确地说:在 Win 7 Prof. 中使用 Eclipse 在 MinGW 中运行)并且该代码对于少量的类实例运行良好,但是当类实例的数量超过 10509 时,错误来自windows 出现,然后 eclipse 显示“std::bad_alloc”错误。 我正在使用“new”来构建新的类实例,每个类都需要两个指针和三个“long int”、“string”和“int”类型的变量。 我无法解构之前构建的任何实例,因为稍后我需要将它们作为节点在程序的其他部分进行评估。但是,无论如何,我已经将类解构器添加到类定义中,并且可以肯定地正确设置它们。 我确定程序停止的时间和命令,恰好是在尝试添加第 10510 个类实例时构造 10509 个类实例之后。

所以我想知道是否可以扩展保留的内存来分配新的类实例?

代码太长就不贴在这里了。 感谢您的帮助!

最佳答案

首先,new 在其中工作的动态内存通常会占用进程中所有剩余的可用内存。没有办法进一步扩展它。您最初拥有多少动态内存取决于您的程序拥有多少非动态数据。如果不了解您的程序,就没有办法说。通过减少非动态数据的大小,您可以有效地“扩展”可用作动态内存的内容。

其次,在具有虚拟内存的平台上,“内存不足”是不可能的(假设您有一个健康的交换文件)。但是您可能会耗尽进程地址空间。同样,如果仅分配 10509 对象后地址空间用完,则一定是其他地方出了问题。

第三,10509 看起来是一个非常小的数字。因此,如果在分配了如此少的对象后内存不足,这可能意味着对象本身相当大。您的对象有多大?

第四,堆损坏可能会触发动态内存分配错误,这意味着即使从技术上讲仍有大量空闲内存可用,分配也会失败。如果不进一步了解您的代码,就没有办法说。

关于c++ - 指针内存分配失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18813612/

相关文章:

linux - 如何分配 4k 对齐的内存

Python,从内存中删除密码

c++ - 是否可以将 TCP 数据包发送到 UDP-only 服务器?

c++ - 为什么 STL 的 std::sort 不适用于不可变类?

java - 如何在 Eclipse 中浏览 Android 类文件(附带源代码)?

android - 获取 Android Activity 以运行非 Activity 代码

python - 为什么我不能在一个类中连接 'str' 和 'instance' 对象?

linux - 虚拟页和页框的区别?

c++ - 知道谁指向它的对象

c++ - "&&"和 "and"运算符之间的区别