为简单起见,请考虑此类有3个属性。
class Human
{
public:
int id;
int age;
std::string name;
};
int main()
{
Human *h = new Human[120000]; <-- breaking
return 0;
}
我得到的错误是 Human.exe中0x76ACC52F处的未处理异常:Microsoft C ++异常:内存位置0x000D0EA8处的std :: bad_alloc。
运行该程序的机器具有32 GB RAM和1 TB硬盘驱动器,具有分页功能。 Human类有大约350个属性。我检查并发现每个Human对象大约需要29000个字节。总共应该分配29000 X 120000 = 3.48 GB
我假设这是一个内存问题,程序没有足够的内存来完成新操作。为什么呢。 32 GB不是一个小内存。除了运行此C ++程序的Visual Studio之外,没有任何其他程序在运行。
请让我知道你对此事的看法和可能的解决方案。
非常感谢你。
答案 0 :(得分:0)
因此,如64位编译的注释中所示解决了问题,但您应该使用链表而不是数组,因为它不需要连续的内存块。