glibc erkennen smallbin verlinkten Liste beschädigt
Ich versuche, eine Funktion auszuführen, die immer wieder in eine große Schleife, aber ich bekomme ein Fehler nach 2 oder 3 Iterationen aber wenn ich die starte von dem Punkt, es gab einen Fehler, es funktioniert gut, aber wieder beendet, nachdem 3 4 iteration. Es könnte ein problem mit dem Arbeitsspeicher. Die Funktion ist Recht groß, ich bin nicht sicher, wo genau es ist ein Speicher-Lecks. Gibt es trotzdem kann ich kostenlos die Variablen, die nach jeder iteration oder etwas, die dieses problem löst. Oder, wie es eine verknüpfte Liste Speicher problemlos alle verknüpften Liste oder sowas???Was kann die Lösung sein? Das problrm tritt nicht ein, wenn ich die Funktion einmal so, dass ich denke, es ist weil ich rufe die Funktion immer wieder in einer Schleife. Gibt es eine Möglichkeit, dieses problem zu lösen?
Den Fehler
**glibc detected:.....malloc():smallbin double linked list corrupted: 0x000000000 1d404c0 ***
InformationsquelleAutor user1583647 | 2013-10-23
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die Bibliothek ist Ihnen zu sagen, dass die Speicher-Metadaten ist beschädigt. Das wird nicht passieren, durch bloße Speicherverlust, Sie zu schreiben hatte, um ungültige Zeiger. Entweder Sie schrieb, index out of bounds oder Sie schrieb Zeiger, nachdem es befreit wurde.
Die einfachste Möglichkeit zum Debuggen dieser Art von Problem ist mit valgrind. Es funktioniert nur unter Linux, sondern Sie zu sein scheinen mit, dass bereits. Es ist eher langsam, weil es einzelne Schritte, die das Programm und überprüft jede Speicher-Zugriff auf die Anweisung, aber es kann zu fangen invalid memory access), und auch die Verwendung von nicht initialisierten Variablen und Speicher-Lecks sehr zuverlässig.
Gibt es auch duma (detect unbeabsichtigte memory access) Bibliothek. Es können auch arbeiten auf anderen Plattformen und ist ein bisschen schneller, aber es braucht viel mehr Speicher.
Und es ist gcc eigenen Schmutzfänger, die aktiviert werden kann durch spezielle compiler-Optionen. Man sollte auf den meisten gcc-Ziele, aber ich bin mir nicht sicher, wie vollständig die C++ Unterstützung ist.
Update (11/2018): mudflap wird meist ersetzt durch Google Desinfektionsmittel, die einen Teil der Clang.
Die Korruption ist in der Regel pseudo-random und standard-Bibliothek nur erkennt es, lange, nachdem es tatsächlich passiert ist. Aber valgrind fangen können, wenn der ungültige Zugriff passiert.
gibt es eine Möglichkeit um den Speicher zu bekommen Undichtigkeiten oder Probleme mit dem Speicher, der das Programm neben der standard-Bibliothek dem Programm?
Ich lief die valgrind-aber es gibt mir eine lange Liste von Fehlern die meisten von Ihnen sind in der standard-Bibliothek im Programm verwendet, so ist es eine Möglichkeit, nur eine Liste der Speicherlecks in meinem Programm neben der standard-Bibliothek verwendet?
Das Letzte Bild ist die standard-Bibliothek, aber Sie sind fast sicher verursacht durch den falschen Gebrauch der Bibliothek. Sie analysieren die Ablaufverfolgungen.
InformationsquelleAutor Jan Hudec
Warnung: die Sehr spezifische use-case -
Hatte ich dieses problem innerhalb einer Anwendung geschrieben mit Qt, wo ich war mit Zeiger auf ein abgeleitetes Objekt aus
QObject
hatte, dass ein Kopie-Konstruktor. Ich habe irgendwie übersehen, dass die folgende Warnung beim kompilieren:Es stellt sich heraus, dass
QObject
abgeleitete Objekte sollen nicht kopiert werden, aber ich hatte nicht erwartet, den copy-Konstruktor auf meineQObject
abgeleitete Klasse, die dazu führen, diese Art von Fehler.InformationsquelleAutor Ayberk Özgür