Exception im Destruktor von std::wstring auf dem Stack



  • Hallo,

    wie kann das passieren, dass ich eine Exception (InvalidPointer) im Destruktor der std::wstring Klasse bekomme, die nur auf dem Stack angelegt ist?

    Ich vermute, dass es irgendwas damit zu tun hat, dass ich mehrere DLLs vermute und irgendwie jemand anderes versucht die Daten frei zu geben, als sie erzeugt hat.

    Bin da schon etwas stutzig, wie sowas passieren kann... 😞

    Gruß
    Henno



  • Hallo Henno,

    das passiert i.A. genau dann, wenn DLLs oder auch Libraries dazugebunden werden, deren Übersetzungseinstellungen (Debug<->Release; SingleThread<->Multithread; Package!?; u.a.) nicht zusammen passsen.

    Dann ist nämlich eine Struktur A in der einen Übersetzungseinheit unterschiedlich groß zu der gleichen Struktur A in einer anderen. Bemerkt wird das dann vorwiegend in Konstruktionen mit Pointern. std::basic_string ist ein Kandidat; wahrschinlicher knallt es bei std::map.

    Tipp: alle Projektsettings aller Libs und Deine eigenen prüfen.

    Der Effekt tritt auch auf, wenn gleiche (STL-)Header aus zwei verschiedenen Libraries angezogen werden; so auf Deinem Rechner zwei davon existieren ..

    Gruß
    Werner



  • Die Einstellungen müssten alle stimmen. Ich vermute jetzt, dass beim Werfen einer Exception (was so gewollt ist) aus einer DLL diese nach unten weitergereicht werden. Ein netter Destruktor entlädt jedoch diese DLLs. Wenn dann später auf die Exception zugegriffen werden soll... mhmm, ne, so ganz passt das alles nicht zusammen. Aber das werd ich morgen mal ausprobieren, obs daran liegt.

    Danke jedenfalls!


Anmelden zum Antworten