指针的内存分配失败

Memory allocation failure with pointers

本文关键字:失败 分配 内存 指针      更新时间:2023-10-16

我已经搜索了著名的错误"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看起来是一个非常低的数字。因此,如果在分配如此少的对象后内存不足,则可能意味着对象本身相当大。您的对象有多大?

第四,动态内存分配

错误可能是由堆损坏触发的,这意味着即使技术上仍有充足的可用内存,分配也会失败。如果不了解您的代码,就无法说。