C++ std::构造函数中无序的_映射分段错误

C++ std::构造函数中无序的_映射分段错误,c++,segmentation-fault,C++,Segmentation Fault,我在分配对象时遇到了一个奇怪的分割错误,该对象将无序的_映射作为一个atribute,调试似乎指向它发生在hashtable.h的某个地方,当分配映射时。有人知道为什么会这样吗 在分段故障之前,i达到值13222438 struct Graph{ unordered_map<int,Graph*> neighbor; int something(){return (int)neighbor[0]++;///so it doesnt get optimized out

我在分配对象时遇到了一个奇怪的分割错误,该对象将无序的_映射作为一个atribute,调试似乎指向它发生在hashtable.h的某个地方,当分配映射时。有人知道为什么会这样吗

在分段故障之前,i达到值13222438

struct Graph{
    unordered_map<int,Graph*> neighbor;
    int something(){return (int)neighbor[0]++;///so it doesnt get optimized out
    }
};
int main(){
    std::list<Graph*> test;
    for(long long i=0; i< 100000000.0d;i++ ){
        test.push_back(new Graph());
    }
    std::cout<< "Done" <<std::endl;
    return 0;
}
结构图{ 无序地图邻居; int something(){return(int)neighbor[0]++;///所以它不会得到优化 } }; int main(){ 标准:列表测试; 对于(长i=0;i<100000000.0d;i++){ test.push_back(新图形()); }
std::cout当我调整您的程序以实际编译,并以64位模式构建它时,它会很好地完成

当我以32位模式构建它时,它会执行以下操作:

terminate called after throwing an instance of 'St9bad_alloc'
what():  std::bad_alloc

因为它的内存不足。

您主要遇到系统内存限制

在我的系统上,
sizeof(Graph)
是56。仅创建对象的
100000000
大约需要5 GB内存。当然,还有其他与动态内存分配和创建指针列表相关的开销


创建
10000000
对象时,我能够在我的环境中运行该程序,比您使用的对象数少10倍,但是如果我在该数字的末尾再加上一个零,程序就会崩溃。

请发布一个。在这种情况下,它应该是一个完整的可编译程序。如果您需要构建如此庞大的列表来显示内存,请重新编译如果出现错误,您可能刚开始就用完了。