gpt4 book ai didi

c++ - QMap::freeData() 上的 Qt 核心

转载 作者:太空宇宙 更新时间:2023-11-04 13:45:49 24 4
gpt4 key购买 nike

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

#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 工作正常,只要它使用的对象没有被错误代码损坏。

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

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

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

关于c++ - QMap::freeData() 上的 Qt 核心,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26044454/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com