Speicherlecks



  • Hallo

    Ich lasse ein Programm (mit Hoilfe der MFC erstellt) mittels einer Endlosschleife laufen und die Speichernutzung nimmt ziemlich stark zu. Das Programm beginnt mit 8 MB und nach etwa einer Woche nutzt es etwa 100 MB. Gibt es mit Visual Studio eine Möglichkeit Speicherlecks zu finden?

    Gruß
    SArkin



  • vc weiss ich nicht - aber kauf dir numegas boundschecker, der kann das !



  • SArkin schrieb:

    Hallo
    Ich lasse ein Programm (mit Hoilfe der MFC erstellt) mittels einer Endlosschleife laufen und die Speichernutzung nimmt ziemlich stark zu. Das Programm beginnt mit 8 MB und nach etwa einer Woche nutzt es etwa 100 MB. Gibt es mit Visual Studio eine Möglichkeit Speicherlecks zu finden?

    klar. siehe DEBUG_NEW, was am anfang aller deiner *.cpp steht.



  • Hi,

    wenn du Visual C++ im Debugmodus laufen lässt (F5 statt strg+F5 bei VC++ 6.0) werden eventuelle Speicherlücken nach dem Beenden des Programmes angezeigt.

    Grüße Rapha



  • Hallo

    Damit klappt es

    #define _CRTDBG_MAP_ALLOC
    #include <stdlib.h>
    #include <crtdbg.h>
    

    Damit werden die Speicherlecks angezeigt.

    _CrtDumpMemoryLeaks();
    

    Damit sehe ich nun meine Speicherlecks und es sind nicht gerade wenig. Allerdings sind mir die Speicherlecks nicht ganz verständlich. Sollten nicht Variablen, welche innerhalb von Schleifen oder Zuweisungen erstellt werden automatisch freigegeben werden?



  • SArkin schrieb:

    Damit sehe ich nun meine Speicherlecks und es sind nicht gerade wenig. Allerdings sind mir die Speicherlecks nicht ganz verständlich. Sollten nicht Variablen, welche innerhalb von Schleifen oder Zuweisungen erstellt werden automatisch freigegeben werden?

    Wenn du Variablen mit new erstellst, werden sie nie automatisch freigegeben (es sei denn das Programm wird beendet - und auch hier nur 100% wenn du >= Win 2000 verwendest).

    Grüße Rapha



  • Mit new habe ich keine Variablen erstellt. Vorwiegend benutze ich Vectoren, Strings. Wird dabei automatisch new verwendet? Vielleicht sollte ich in Zukunft nur noch new verwenden, damit kann ich dann den Speicher wenigstens wieder freigeben.

    SArkin


Anmelden zum Antworten