Un appel à effacer sur un QByteArray génère l'exception suivante:*** *** glibc détectée double libération ou de corruption (fasttop):
* glibc détecté */home/yan/FPS2/FPS2: double gratuit ou corruption (fasttop):
0 ?? 1 ??
2 libre 3 QByteArray :: clear()
4 FPSengine :: getDatagrams
5 FPSengine :: xmitData
6 FPSengine :: getData
7 threadDatalog :: run
8 ??
9 start_thread
10 clone
11 ?? 0
est-ce un bug qt ou pourrait-il avoir quelque chose à voir avec mon code? Je connais QObjects arent thread safe (définition QT pas plusieurs threads appelant la même fonction de la même instance d'objet) mais ma fonction a mutexes. Aussi, je reçois très rarement cette erreur même si la même fonction est appelée fréquemment. P.S. Une façon d'éviter cela est d'env var MALLOC_CHECK_ 0
cette URL concerne un problème similaire et certains messages semblent impliquer son causé par une version incompatible de la glibc.
*** glibc detected *** perl: double free or corruption (!prev): 0x0c2b7138 ***
Les trois dernières questions que vous avez postées semblent être des symptômes de synchronisation incorrecte entre les threads. Je ne pense pas que votre classe FPSengine soit thread safe, mais il n'y a toujours pas assez d'informations pour fournir une réponse. – rpg
Eh bien, j'ai fait un test en n'activant que l'un des qthreads et bien sûr le thread principal est toujours là. Aussi le thread principal ne faisait rien et la fonction appelée depuis le qthread a un verrouillage mutex sur la première instruction et le déverrouillage sur la dernière instruction. D'après ce que je peux voir en lisant le code de la documentation QByteArray.cpp et Qt sur les classes implicitement partagées, cela semble être un problème de déréférencement. Maintenant, j'essaie de voir comment la synchronisation des threads son impliqué –