我在核心上有以下堆栈跟踪:
#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() 了解更多,我可能能够弄清楚并修复这个核心。
最佳答案
您无需了解有关 freeData
的任何信息。 myClass3
中的 map 字段内容已损坏,getMap()
浅拷贝已损坏的 map 实例。 freeData
工作正常,只要它使用的对象没有被错误代码损坏。
由于您正尝试从多个线程访问数据,因此您必须:
从每个线程中共享数据结构的单独实例进行操作。关键是:您必须在“拥有”源的线程中创建一个拷贝。然后您可以将拷贝传递给另一个线程并在那里使用它。参见 this answer例如代码。
使用互斥量保护对数据结构的访问。
关于c++ - QMap::freeData() 上的 Qt 核心,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26044454/