我搜索了著名的“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/