对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 ***
答案 0 :(得分:4)
它可能是许多不同的东西,包括引用函数调用返回的临时QByteArray
,但它不太可能(IMO)成为Qt中的错误。
以下是调试的一些想法:
答案 1 :(得分:2)
这是因为应用程序是多线程的,该对象属于mainthread,但是在另一个线程中使用,即使我在QBytearray上使用了互斥锁,使用它来执行readDatagram的UDPsocket也在mainthread中。 ..还是我需要udpSocket也在主线程中
答案 2 :(得分:1)
我非常怀疑你在qt中发现了一个错误。出于多种原因可能会发生此错误,但必不可少的是,您可以引用已释放的内存。运行调试器并尝试查看导致问题的原因。使用gdb和valgrind,希望你能找到问题所在。