对 QByteArray 进行清除的调用会生成以下异常:

* 检测到 glibc * /home/yan/FPS2/FPS2:双重释放或损坏(fasttop):

0 ?? 1 ??
2 免费
3 QByteArray::clear()
4 FPSengine::getDatagrams
5 FPSengine::xmitData
6 FPSengine::getData
7 线程Datalog::r​​un
8 ??
9 启动线程
10个克隆
11 ?? 0

这是一个 qt bug 还是与我的代码有关?我知道 QObject 不是线程安全的(QT 定义不是多个线程调用同一对象实例的同一函数),但我的函数有互斥体。此外,即使经常调用相同的函数,我也很少遇到此错误。附:防止这种情况的一种方法是设置 env var MALLOC_CHECK_ 0

这个 url 涉及类似的问题,一些帖子似乎暗示它是由不兼容的 glibc 版本引起的。

*** 检测到 glibc *** perl:双重释放或损坏(!prev):0x0c2b7138***

有帮助吗?

解决方案 2

这是由该应用程序是多线程的事实造成的,该对象所属的mainthread但在另一个线程被使用,即使我用互斥上的QByteArray它使用它做readDatagram也是在mainthread的UDPsocket。 ..和是我需要udpSocket是在主线程以及

其他提示

这可能是许多不同的事情,包括引用临时的 QByteArray 由函数调用返回,但它不太可能(IMO)是 Qt 中的错误。

以下是调试的一些想法:

  • 在 Valgrind 下运行它,看看它是否会突出问题
  • 针对具有可用调试符号的 Qt 版本运行您的应用程序
  • 启用核心转储并查看是否获得核心文件

我很怀疑你已经发现Qt中的错误。可能出现的错误有很多原因,但重要的手段,你必须记忆的引用已被释放。通过调试运行和尝试,看看是什么原因造成的问题。用GDB和Valgrind的,希望你能来追踪问题。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top