*** glibc 检测到*** 双重释放或损坏(fasttop):
-
25-09-2019 - |
题
对 QByteArray 进行清除的调用会生成以下异常:
* 检测到 glibc * /home/yan/FPS2/FPS2:双重释放或损坏(fasttop):
0 ??
1 ??
2 免费
3 QByteArray::clear()
4 FPSengine::getDatagrams
5 FPSengine::xmitData
6 FPSengine::getData
7 线程Datalog::run
8 ??
9 启动线程
10个克隆
11 ?? 0
这是一个 qt bug 还是与我的代码有关?我知道 QObject 不是线程安全的(QT 定义不是多个线程调用同一对象实例的同一函数),但我的函数有互斥体。此外,即使经常调用相同的函数,我也很少遇到此错误。附:防止这种情况的一种方法是设置 env var MALLOC_CHECK_ 0
这个 url 涉及类似的问题,一些帖子似乎暗示它是由不兼容的 glibc 版本引起的。
解决方案 2
这是由该应用程序是多线程的事实造成的,该对象所属的mainthread但在另一个线程被使用,即使我用互斥上的QByteArray它使用它做readDatagram也是在mainthread的UDPsocket。 ..和是我需要udpSocket是在主线程以及
其他提示
这可能是许多不同的事情,包括引用临时的 QByteArray
由函数调用返回,但它不太可能(IMO)是 Qt 中的错误。
以下是调试的一些想法:
- 在 Valgrind 下运行它,看看它是否会突出问题
- 针对具有可用调试符号的 Qt 版本运行您的应用程序
- 启用核心转储并查看是否获得核心文件
我很怀疑你已经发现Qt中的错误。可能出现的错误有很多原因,但重要的手段,你必须记忆的引用已被释放。通过调试运行和尝试,看看是什么原因造成的问题。用GDB和Valgrind的,希望你能来追踪问题。
不隶属于 StackOverflow