Compilerbug in C++ Builder 2006 - Stackallockierte Objekte nicht zerstört



  • Ich habe ein dickes Problem: Offensichtlich werden stackallockierte Variablen am Ende ihres Gültigkeitsbereiches nicht wieder freigegeben. Ich arbeite mit dem C++ Builder 2006 mit allen Patches. Das Verhalten ist mit einer Klasse wie der folgenden im ganzen Projekt zu demonstrieren. Die Messagebox wird nur angezeigt, wenn ich die Instanz auf dem Heap erzeuge und von Hand zerstöre.

    class TDummy
    {
    public:
       __fastcall TDummy(const String& Message): Message(Message) {}
       __fastcall ~TDummy()
       {
          ShowMessage (Message);
       }
    private:
       String Message;
    };
    

    Der Versuch, das ganze in einem Minimalbeispiel nachzuvollziehen scheitert jedoch. Lege ich ein neues Projekt an und erzeuge eine heapallockierte Instanz obiger Klasse sehe ich ordnungsgemäß die Messagebox. Ich vermute, dass irgendeine Änderung in meinem Projekt das Problem ausgelöst hat, habe aber keinen blassen Schimmer, was das sein könnte.
    Hat jemand einmal ähnliche Erfahrungen gemacht?



  • ShowMessage ist ungeeignet für die Demonstration solcher Probleme; wenn die Anwendung geschlossen wird und infolgedessen Application->Terminated true ist, werden mit ShowMessage hervorgerufene Dialoge unterdrückt. Benutze stattdessen Breakpoints, MessageBox oder OutputDebugString.



  • Das Problem verschwand schließlich so plötzlich wie es gekommen war - durch einen Neustart der IDE nach anderthalbtägigem Debuggen. Argh. 😡



  • audacia schrieb:

    ShowMessage ist ungeeignet für die Demonstration solcher Probleme; wenn die Anwendung geschlossen wird und infolgedessen Application->Terminated true ist, werden mit ShowMessage hervorgerufene Dialoge unterdrückt. Benutze stattdessen Breakpoints, MessageBox oder OutputDebugString.

    Meine Versuche hatte ich freilich an Stellen gemacht, an denen auch eine Messagebox angezeigt werden kann.



  • h0b0 schrieb:

    Das Problem verschwand schließlich so plötzlich wie es gekommen war - durch einen Neustart der IDE nach anderthalbtägigem Debuggen. Argh. 😡

    Du läßt die IDE anderthalb Tage am Stück laufen? 😮 😃

    An Probleme dieser Art kann ich mich beim C++Builder 2006 auch noch erinnern. Hin und wieder ein komplettes Rebuild oder im Zweifelsfalle ein Neustart der IDE halfen.



  • audacia schrieb:

    Du läßt die IDE anderthalb Tage am Stück laufen? 😮 😃

    Gewöhnlich nicht. Normalerweise stürzt sie vorher richtig ab... ... ...


Anmelden zum Antworten