【问题标题】:iterate over a set cause a coredump迭代一组导致核心转储
【发布时间】:2013-06-07 11:52:57
【问题描述】:

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

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

【问题讨论】:

    标签: stl segmentation-fault set


    【解决方案1】:

    有什么问题?

    鉴于您提供的数据,无法确定。

    有几种常见的原因:

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

    要弄清楚发生了什么,quit thinking and look 例如通过在调试器中运行程序并准确了解核心转储发生的位置

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-17
      • 2021-11-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多