double free or corruption dump



  • Hallo Forum,

    bin am Verzweifeln.

    Der Titel sagt schon um was es sich handelt. Dieser Fehler wird ausgelöst bei einem Destruktoraufruf. Das Objekt existiert aber zu 100% (in gdb kann ich vor dem destruktor noch alles auslesen und es scheint alles gültig zu sein; außerdem wird das Objekt an keiner anderen Stelle zerstört).
    Er tritt aber auch auf, wenn ich die komplette Funktion des Destruktors auskommentiere. Nur eben nicht wenn ich den Aufruf auskommentiere.

    Deshalb gehe ich davon aus, dass ich irgendwo ganz anders schon etwas falsches mache was sich eben hier als Seiteneffekt auswirkt.

    Mit dem Debugger komme ich seit 2 Wochen auch auf keine passende Stelle.

    Die Sourcen alle zu posten wäre hier auch etwas zu viel, deshalb frage ich lieber welche Vorgehensweisen ihr bei der Suche nach dem Fehler verwendet.

    Dass es da kein allgemein gültiges "Kochrezept" gibt ist mir bewusst, aber mit welchen Tricks kann ich den Fehler eingrenzen oder sonst irgendwas?

    Danke schonmal.

    mfg jghj



  • Ich glaube ich würde erst einmal alle frees bzw deletes überprüfen, und schauen ob sich vielleicht irgendwo eins zuviel eingeschlichen hat.
    Danach bzw. dabei würde ich auch alle Indexzugriffe auf Arrays etc überprüfen und schauen, ob nirgends in unreservierten Speicher geschrieben wird.

    Diese Fehlermeldung klingt für mich ziemlich nach zerstörtem Heap.



  • Hmmm....okay so werde ich wohl mal anfangen...

    Ich finds nur irgendwie krass, weil mal stelle sich mal ein Officepaket oder sonstirgendein riesen Projekt vor .... da wird sowas doch bestimmt auch vorkommen und da kann man dann bestimmt nicht alle frees auskommentieren^^



  • Hallo

    Solche Probleme kann man gut durch RAII verhindern. Manuelle delete-Aufrufe sollten immer überprüft werden ob sie nicht durch Smart-Pointer abgelöst werden können, und sei es nur std::auto_ptr.

    bis bald
    akari


Anmelden zum Antworten