1

我在核心上有以下堆栈跟踪:

#1 0x..... in raise()
#2 0x..... in abort()
#3 0x..... in xehInterpretSavedSigaction()
#4 0x..... in xehExceptionHandler()
#5 <signal handler called>
#6 0x..... in QMap<int, myClass#1>::freeData(QMapData*) ()
#7 0x..... in myClass#2::myClass#2Method()
#8 0x..... so on and so forth

使用 QMap 的代码如下所示:

     foreach (myClass::sturct1 conn, myClass3->getMap())
     {
         if (conn == x)
         {
             return conn;
         }
     }

foreach 行是使用 getter 方法检索 QMap 的地方。有人知道 QMap::freeData() 做什么吗?我在互联网上任何地方都能找到的唯一参考资料是实际的 QMap.h 源。看起来该方法在 QMap 析构函数中使用。方法名称让我相信它正在释放数据。无论如何,我想如果我对 freeData() 有更多的了解,我可能能够弄清楚并修复这个核心。

4

1 回答 1

0

你不需要知道任何关于freeData. 其中地图字段的内容myClass3已损坏,并getMap()浅拷贝已损坏的地图实例。freeData只要它使用的对象没有被错误代码损坏,它就可以正常工作。

由于您尝试从多个线程访问数据,因此您必须:

  1. 从每个线程中共享数据结构的单独实例进行操作。关键是:您必须在“拥有”源的线程中创建一个副本。然后,您可以将副本传递给另一个线程并在那里使用它。有关示例代码,请参见此答案

  2. 使用互斥锁保护对数据结构的访问。

于 2014-09-25T18:35:14.590 回答