it-swarm.com.de

Was kann den Fehler "beschädigte doppelt verknüpfte Liste" verursachen?

Ich habe Probleme mit einem ziemlich komplexen Code. Ich konnte kein kurzes Snippet erstellen, das den Fehler reproduziert, daher werde ich versuchen, das Problem in Worten zu erklären.

Der Code stürzt zufällig mit dem Fehler ab

*** glibc detected *** gravtree: corrupted double-linked list: 0x000000001aa0fc50 ***

Das Debuggen hat gezeigt, dass es aus der Zeile stammt, in der der Code ein Objekt freigibt. An dem Objekt scheint nichts auszusetzen. Es existiert und ich kann zum Zeitpunkt des Fehlers auf seine Daten zugreifen. Der Destruktor des Objekts ist trivial und macht nichts.

Also stecke ich irgendwie fest. Unter welchen Umständen erwarten Sie, dass "frei" scheitert?

20
hanno

Versuchen Sie, Ihr Programm unter Valgrind auszuführen. Es kann auf eine frühere Ursache hindeuten, während gdb nur dort einbricht, wo bereits Schaden entstanden ist.

11
Warren Young

Wie Warren sagte, ist Valgrind normalerweise der beste Weg, um es zu finden. Die doppelt verknüpfte Liste ist eine Basis von normalerweise Netzwerk- oder Binärdaten-Handlern, dh in QT QByteArray oder QTcpSocket. Ich hatte heute das Gleiche und das lag daran, dass ich ein Objekt ungültig gemacht hatte, indem ich es von einer Karte löschte, aber zuvor Zeiger auf Daten darin erhalten hatte. Es hat manchmal funktioniert, manchmal nicht. Je höher die Systemlast, desto wahrscheinlicher ist ein Absturz.

0
Chris Benesch