构造函数中的std :: unordered_map分段错误

时间:2017-06-25 06:37:10

标签: c++ segmentation-fault

在分配具有unordered_map作为属性的对象时,我发现了一个奇怪的分段错误,调试似乎指向它在分配映射时在hashtable.h上的某处发生。有人知道为什么会这样吗?

在分段错误之前,我达到了值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;
}

2 个答案:

答案 0 :(得分:0)

当我调整你的程序以实际编译,并在64位模式下构建它时,它就完成了。

当我在32位模式下构建它时,它用:

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

因为内存耗尽。

答案 1 :(得分:0)

您主要遇到系统内存限制。

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

我能够在创建10000000对象时在我的环境中运行该程序,比你使用的数量少10倍,但如果我在该数字的末尾添加另一个零,则崩溃。