在findNode函数中调用contains()时,为什么QMap会崩溃?

时间:2014-04-11 14:13:55

标签: qt crash contains qmap

我有一个多线程程序,它使用QMap来存储一些数据,但是当调用contains()函数时,它会在同一行中一直崩溃:

myMap.contains(a) - >键和值不是指针。

崩溃:

#0 findNode (akey=<synthetic pointer>, this=0x120eec4c) at /var/build/workspace/stage/nto/usr/include/qt4/QtCore/qmap.h:486 #1 contains (akey=<synthetic pointer>, this=0x120eec4c) at /var/build/workspace/stage/nto/usr/include/qt4/QtCore/qmap.h:555

崩溃的线就是这一行:

for (int i = d->topLevel; i >= 0; i--)

我相信唯一可能导致崩溃的是指针d以某种方式被删除。知道它崩溃的原因,或者我应该如何进行调试?

由于

1 个答案:

答案 0 :(得分:2)

您正在从多个线程访问地图实例,而无需序列化访问权限。你不能这样做。你必须:

  1. 在每个帖子中都有一份地图副本,或

  2. 使用互斥锁序列化对地图的访问。

  3. 由于隐式共享Qt容器,因此复制地图相当便宜。必须在拥有的线程中创建副本,然后可以在任何其他线程中使用该副本。如果需要,复制的实例将线程安全地分离。