【发布时间】:2010-02-04 05:38:07
【问题描述】:
对 QByteArray 的 clear 调用会产生以下异常:
* 检测到 glibc * /home/yan/FPS2/FPS2: double free or corruption (fasttop):
0 ??
1??
2 免费
3 QByteArray::clear()
4 FPSengine::getDatagrams
5 FPSengine::xmitData
6 FPSengine::getData
7 线程数据日志::运行
8 ??
9 start_thread
10 克隆
11 ?? 0
这是一个 qt 错误还是与我的代码有关?我知道 QObjects 不是线程安全的(QT 定义不是多个线程调用同一个对象实例的同一个函数),但我的函数有互斥锁。即使经常调用相同的函数,我也很少收到此错误。附言防止这种情况的一种方法是 env var MALLOC_CHECK_ 0
这个 url 涉及一个类似的问题,一些帖子似乎暗示它是由不兼容的 glibc 版本引起的。
*** glibc detected *** perl: double free or corruption (!prev): 0x0c2b7138 ***
【问题讨论】:
-
您发布的最后三个问题似乎是线程之间不正确同步的症状。我不认为您的 FPSengine 类是线程安全的,但仍然没有足够的信息来提供答案。
-
好吧,我只启用了一个 qthread 进行了测试,当然主线程总是在那里。主线程也没有做任何事情,从 qthread 调用的函数在第一条指令上具有互斥锁,在最后一条指令上解锁。从阅读 QByteArray.cpp 的代码和关于隐式共享类的 Qt 文档中可以看出,这似乎是一个取消引用问题。现在我想看看他是如何参与线程同步的
标签: multithreading qt glibc qthread