0

我遇到了一个问题,当我迭代一个集合时,我的程序核心转储,代码如下,当集合的大小低于 50000 时,它运行正常,而当大小大于 50000(几乎)时它会失败。我在 for 循环中什么也没做,但它仍然核心转储。有什么问题?

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

1 回答 1

0

问题是什么?

鉴于您提供的数据,这是不可能的。

有几个常见的原因:

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

要弄清楚发生了什么,请停止思考并查看,例如通过在调试器中运行程序并准确了解coredump 发生的位置。

于 2013-06-10T03:54:49.260 回答