迭代一组导致一个coredump

时间:2013-06-07 11:52:58

标签: stl segmentation-fault set

我遇到了一个问题,我的程序在迭代一个集合时进行了coredumped,代码在下面,当集合的大小低于50000时,它运行正常,而当它的大小超过50000时它会失败(几乎我没有在for循环中做任何事情,但它仍然是coredumped。问题是什么?

set<CRoute *>::iterator it = route_list.begin();
for(; it != route_list.end(); ++it)
{
    //Nothing TODO
}

1 个答案:

答案 0 :(得分:0)

  

问题是什么?

根据您提供的数据,我们无法说出来。

有几个常见原因:

  • 您已损坏程序中较早的set(例如,通过从多个线程访问它而没有正确锁定)
  • 您使用的排序谓词违反了std::set的严格weak ordering requirements
  • 你在std::set中留下了一个悬空指针,你的排序谓词使用悬空数据并在给定垃圾时崩溃。

要弄清楚发生了什么,quit thinking and look例如通过在调试器中运行程序并完全理解在哪里正在进行coredump。