QMap::freeData()上的Qt核心

Qt core on QMap::freeData()

本文关键字:Qt 核心 上的 freeData QMap      更新时间:2023-10-16

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

#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中映射字段的内容已损坏,getMap()浅层复制已损坏的映射实例。只要与freeData一起工作的对象没有被错误代码损坏,它就可以正常工作。

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

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

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