0

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

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

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

4

1 回答 1

2

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

其次,在具有虚拟内存的平台上,实际上不可能“内存不足”(假设您有一个健康的交换文件)。但是你可以用完进程地址空间。同样,如果只分配10509对象后地址空间用完了,那么肯定是有其他问题。

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

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

于 2013-09-15T17:41:10.577 回答