Ce qui peut provoquer un “corrompu double liste chaînée d'erreur”?
Je vais avoir des problèmes avec un relativement complexe, code. Je n'étais pas en mesure de produire un court extrait qui reproduit l'erreur, donc je vais essayer d'expliquer le problème dans les mots.
Le code se bloque au hasard avec l'erreur
*** glibc detected *** gravtree: corrupted double-linked list: 0x000000001aa0fc50 ***
De débogage a montré qu'il s'agit de la ligne où les codes libère un objet. Il semble y avoir rien de mal avec l'objet. Il existe, et je peux accéder à des données au moment où l'erreur se produit. Le destructeur de l'objet est trivial et ne pas faire n'importe quoi.
Donc, je suis un peu coincé. Dans ce genre de circonstances, ne vous attendez "libre" à l'échec?
- On dirait que vous êtes le plus susceptible de corrompre votre mémoire, d'ailleurs, et c'est juste un effet secondaire.
Vous devez vous connecter pour publier un commentaire.
Essayez d'exécuter votre programme sous Valgrind. Il peut faire référence à une cause antérieure, alors que gdb est seule la rupture, dans lequel le dommage a déjà eu lieu.
Que Warren dit, Valgrind est généralement la meilleure façon de le trouver. La liste doublement chaînée est une base de habituellement réseau binaire ou de gestionnaires de données, c'est à dire dans QT
QByteArray
ouQTcpSocket
. J'ai eu la même chose aujourd'hui, et c'était parce que j'avais invalidé un objet par la suppression d'une carte, mais avait déjà obtenu des pointeurs vers les données à l'intérieur d'elle. Il a travaillé, parfois, parfois pas. Plus la charge sur le système le plus probable, il serait panne.