*** glibc检测到***双免费或腐败(fasttop):

时间:2010-02-04 05:38:08

标签: multithreading qt glibc qthread

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

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

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

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

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

*** glibc detected *** perl: double free or corruption (!prev): 0x0c2b7138 ***

3 个答案:

答案 0 :(得分:4)

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

以下是调试的一些想法:

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

答案 1 :(得分:2)

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

答案 2 :(得分:1)

我非常怀疑你在qt中发现了一个错误。出于多种原因可能会发生此错误,但必不可少的是,您可以引用已释放的内存。运行调试器并尝试查看导致问题的原因。使用gdb和valgrind,希望你能找到问题所在。