Rad Studio xe4 - ReportMemoryLeaksOnShutdown - Speicherleck finden ?



  • Hi,

    ich suche in meinem Programm nach Speicherlecks bzw. wollte ich die mir mal ausgeben lassen, hab auch schon alles mögliche an Speicher in meinem Programm erzeugt aber wenn ich das Programm beende kommen keine Meldungen. die globale variable ReportMemoryLeaksOnShutdown hab ich auch auf true gesetzt.

    //---------------------------------------------------------------------------
    #include <vcl.h>
    #pragma hdrstop
    
    #include "Unit1.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
    
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
    	: TForm(Owner)
    {
    }
    
    //---------------------------------------------------------------------------
    void __fastcall TForm1::FormCreate(TObject *Sender)
    {
    	ReportMemoryLeaksOnShutdown = true;
    }
    
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    	int *intZeiger = new int[200];  // Initialisierung
    
    	 intZeiger[0] = 2999;
    	 intZeiger[1] = 3090;
    
    	//delete[] intZeiger;
    
    	TStringList *L = new TStringList();
    	L->Add("irgendwas");
    
    	UnicodeString *Uni = new UnicodeString[300];
    	Uni[0] = "einfach nur müll";
    	Uni[1] = "noch mehr müll";
    }
    
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Button2Click(TObject *Sender)
    {
    	Close();
    }
    


  • ReportMemoryLeaksOnShutdown ist ein Feature des Delphi-Speicherallokators. Wenn du also Delphi-Klassen (wie TStringList , TForm , TButton ) oder EMUVCL-Typen wie String oder Variant leakst, sollte eigentlich schon eine Benachrichtigung erscheinen. Muß ich mal ausprobieren.

    Für C++-Allokationen ist dafür CodeGuard hilfreich, aktiviere das mal in den Compileroptionen.



  • hi,

    hab CodeGuard aktiviert, nach beenden das Programms zeigt er nach und nach alle C++-Allokationen die einen Speicherleck verursachen was schonmal sehr geil ist.
    Er findet also in meinen Beispiel 2 Fehler.

    Die TStringList aber bleibt noch immer unbeachtet.



  • Hallo,

    suche mal im Internet nach MadExcept. Das dürfte die Speicherlecks alle finden.

    Gruß und schöne Ostern



  • @Netzschleicher

    habs installiert danach den Compiler gestartet und unter Project->madExcept settings eingestellt. Bei Basic Settings dann "report resource leaks" aktiviert und auch madExcept selbst aktiviert. Wäre fast verrückt geworden denn es ist nix passiert keine Meldung nix. Irgendwann hab ich das Project dann nochmals gespeichert und es hat dann erst gefunzt.

    Das Projekt muss scheinbar nach den madExcept Einstellungen jedesmal gespeichert werden bevor die Änderung wirksam werden.

    Es funktioniert super es findet alle Speicher-Lecks und über "memory dump" kann man auch leicht sehen was alles so noch im reservierten Speicher drin steht.

    Das Teil funktioniert sogar ohne Compiler wenn es einmal in der Project exe integriert ist.

    Ich finds toll und bin echt begeistert.
    Danke


Anmelden zum Antworten