*** glibc détecté *** double gratuit ou la corruption (fasttop):
Un appel clair sur un QByteArray génère l'exception suivante:
* glibc détecté * /home/yan/FPS2/FPS2: double gratuit ou la corruption (fasttop):
0 ??
1 ??
2
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 de qt ou pourrait-il avoir quelque chose à voir avec mon code? Je sais QObjects ne sont pas thread-safe (QT définition, pas plusieurs threads d'appeler la même fonction, de la même instance d'objet), mais ma fonction a mutex. Aussi, j'ai très rarement vous obtenez 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 se rapporte à un problème similaire et certains postes semble impliquer sa causée par une incompatibilité de version de la glibc.
*** glibc détecté *** perl: double gratuit ou la corruption (!prev): 0x0c2b7138 ***
bien j'ai fait un test en ne permettant à la personne de la qthreads et bien sûr le mainthread est toujours là. Aussi le thread principal ne rien faire et à la fonction qui est appelée à partir de la qthread a un mutex de verrouillage sur la première instruction et de déverrouillage sur la dernière instruction. De ce que je peux voir à partir de la lecture du code de QByteArray.cpp et de la documentation de Qt sur implicitement partagé les classes de ce qui semble être un problème de déréférencement. Maintenant, je suis en train de voir comment la synchronisation des threads sa impliqués
Double Possible de Comment traquer un "double gratuit ou de corruption" erreur
OriginalL'auteur yan bellavance | 2010-02-04
Vous devez vous connecter pour publier un commentaire.
Il pourrait être un certain nombre de choses différentes, y compris le référencement d'un temporaire
QByteArray
retourné par un appel de fonction, mais il est peu probable (OMI) pour être un bug de Qt.Voici quelques pensées pour le débogage:
OriginalL'auteur Kaleb Pederson
ceci est causé par le fait de l'application est multithread, l'objet appartient à la mainthread mais il est utilisé dans un autre thread, même si j'ai utilisé les mutex sur le QBytearray la UDPsocket qui l'utilise pour faire readDatagram est également dans le mainthread...et oui, j'ai besoin de udpSocket être dans le thread principal ainsi
OriginalL'auteur yan bellavance
Je doute fortement que vous avez trouvé un bug dans qt. Cette erreur peut se produire pour un certain nombre de raisons, mais l'essentiel signifie que vous avez une référence à la mémoire a déjà été libérée. Courir à travers les débogueurs et d'essayer et de voir ce qui est à l'origine du problème. L'utilisation de gdb et valgrind et j'espère que vous pouvez suivre le problème.
OriginalL'auteur captncraig