3

对 QByteArray 的 clear 调用会产生以下异常:

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

0 ?? 1??
2 免费
3 QByteArray::clear()
4 FPSengine::getDatagrams
5 FPSengine::xmitData
6 FPSengine::getData
7 threadDatalog::r​​un
8 ??
9 start_thread
10 克隆
11 ?? 0

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

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

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

4

3 回答 3

4

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

这里有一些关于调试的想法:

  • 在 Valgrind 下运行它,看看它是否会突出问题
  • 针对具有可用调试符号的 Qt 版本运行您的应用程序
  • 启用核心转储并查看是否获得核心文件
于 2010-02-04T05:44:04.483 回答
2

这是由于应用程序是多线程的,该对象属于主线程但在另一个线程中使用,即使我在 QBytearray 上使用了互斥锁,使用它来执行 readDatagram 的 UDPsocket 也在主线程中......并且是的,我也需要那个 udpSocket 在主线程中

于 2010-02-26T01:02:24.567 回答
1

我非常怀疑你在 qt 中发现了一个错误。发生该错误的原因有很多,但重要的是您引用了已释放的内存。运行调试器并尝试查看导致问题的原因。使用 gdb 和 valgrind,希望你能找到问题所在。

于 2010-02-04T05:45:43.700 回答