gpt4 book ai didi

qt - 为什么 QMap 在 findNode 函数中调用 contains() 时崩溃?

转载 作者:行者123 更新时间:2023-12-02 05:29:56 26 4
gpt4 key购买 nike

我有一个多线程程序,它使用 QMap 来存储一些数据,但是当调用 contains() 函数时,它时不时地在同一行崩溃:

myMap.contains(a) -> 键和值不是指针。

崩溃:

#0 findNode (akey=<synthetic pointer>, this=0x120eec4c) at /var/build/workspace/stage/nto/usr/include/qt4/QtCore/qmap.h:486 #1 contains (akey=<synthetic pointer>, this=0x120eec4c) at /var/build/workspace/stage/nto/usr/include/qt4/QtCore/qmap.h:555

崩溃的行就是这一行:

for (int i = d->topLevel; i >= 0; i--)

我相信唯一可能导致崩溃的是指针 d被以某种方式删除。知道它为什么崩溃,或者我应该如何继续调试?

谢谢

最佳答案

您正在从多个线程访问 map 实例,而无需序列化访问。你不能这样做。您必须:

  1. 在每个线程中都有一份 map 副本,或者

  2. 使用互斥体序列化对 map 的访问。

由于 Qt 容器是隐式共享的,因此复制映射相当便宜。副本必须在所属线程中进行,然后可以在任何其他线程中使用该副本。如果需要,复制的实例将线程安全地分离。

关于qt - 为什么 QMap 在 findNode 函数中调用 contains() 时崩溃?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23015094/

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