std :: map :: find呼叫中的间歇性崩溃

调用std :: map :: find查找密钥时间歇性地看到崩溃。通过GDB可以看到崩溃在stl_tree.h中

在下面找到崩溃的详细信息

#0  _M_begin (this=<optimized out>) at /usr/include/c++/4.4/bits/stl_tree.h:482
No locals.
#1  find (__k=..., this=<optimized out>) at /usr/include/c++/4.4/bits/stl_tree.h:1421
No locals.
#2  find (__x=..., this=<optimized out>) at /usr/include/c++/4.4/bits/stl_map.h:659
No locals.
评论
  • cnisi
    cnisi 回复

    从提供的细节来看,这是不可能的。

    实际的地图实现是安全的。

    因此,在代码中的某处,您具有未定义的行为。如空指针取消引用或缓冲区溢出。

    出现编译器警告,通过静态分析器运行代码,并在可能的情况下尝试提供最小限度的重现示例(尽管在跟踪偶发性崩溃时这可能非常困难)。然后,您可以调试该示例并查找问题。