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

标签 c++ qt qmap

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

#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/

相关文章:

c++ - 获取 QMap::iterator 的位置 (int)

c++ - 如何检索整个 va_list 输入

qt - 在 QtCreator 中调试时如何查看 qDebug 消息

c++ - 为什么qmap使用skiplist而不是ob rb-tree?

c++ - 如何在 Qt 5.4 程序中的文件之间共享 OpenGL 3.3+ 函数和上下文

c++ - 如何在 QMainWindow 中更新 QGraphicsScene

c++ - 在插槽中使用 QMap

c++ - 如何在 C++ 中一起使用 setw 和 setfill 来填充空格和字符?

java - 接受右值引用作为参数的方法的 Swig 行为

c++ - 为什么 cout 需要标题字符串?