Seite 1 von 1

Memory Leak Detection

Verfasst: 10.07.2021, 11:50
von Mirror
Hallo,


bei meinem Programm kommt es zu geringen Speicherblockverlusten. Dabei werden vermutlich mit new erzeugte Objekte nicht wieder freigegeben.

Ich habe früher VLD benutzt, aber scheinbar geht es nicht mit VS 2019...Was benutzt ihr um solche Probleme zu beheben ?

Re: Memory Leak Detection

Verfasst: 10.07.2021, 13:09
von NytroX
Du kannst das hier mal versuchen, das hat mir schon oft geholfen:
https://docs.microsoft.com/en-us/visual ... ew=vs-2019

Ich selbst habe für VS auch nichts wirklich Gutes finden können.
Ist aber bei mir nicht wirklich schlimm, weil ich einfach vermeide, new oder malloc zu verwenden.
Stattdessen kann man Allokatoren verwenden, da kann man dann meistens die Leaks leicht finden.
Oder natürlich die klassischen unique_ptr bzw. shared_ptr.
Ich teile meinen Code einfach auf in "Low-Level" Teile und höhere Abstraktionen, dann hat man nur wenige Stellen wo überhaupt Leaks entstehen können.

Zudem schreibe ich Software meistens cross-platform, dann kann ich auch valgrind usw benutzen.
Das Ganze hilft natürlich nicht bei gewachsenen, ungepflegten Projekten.

Re: Memory Leak Detection

Verfasst: 10.07.2021, 13:21
von Mirror
Ich habe das schon ausprobiert. Er zeigt mir aber nicht die Zeile und die Datei und das obwohl ich das

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

in meine Hauptinclude Datei ( nicht stdafx.h ) eingegeben habe. Aus irgendeinem Grund fehlen diese wichtigen Angaben,

Re: Memory Leak Detection

Verfasst: 10.07.2021, 13:26
von NytroX
:-(

Ist bei mir leider auch schon ein paar Jahre her, dass ich das benutzt habe... aktuell bin ich unter Linux und kanns leider nicht probieren.
Jemand anderes Erfahrungen damit?

Re: Memory Leak Detection

Verfasst: 10.07.2021, 13:31
von Krishty
Gibt das _CRTDBG_MAP_ALLOC mal in den Präprozessor-Einstellungen deines Projekts an, statt in einzelnen Quelldateien.

Re: Memory Leak Detection

Verfasst: 10.07.2021, 13:42
von Mirror
Das Eingeben in die Präprozessor-Einstellungen hat teilweise Erfolg gehabt. Ich habe jetzt noch 2 zusätzliche Leaks. Bei denen zeigt er die Zeile und den Dateinamen an, aber nicht bei mit new allozierten Objekten.

Re: Memory Leak Detection

Verfasst: 11.07.2021, 18:15
von Jonathan
Ich habe mehrmals erfolgreich Dr. Memory benutzt um Speicherzugriffsfehler zu finden (insbesondere uninitialized reads). Es kann aber eben auch Memory-Leaks finden. Man muss ein wenig auf die Kompilereinstellungen achten und vermutlich einige Filter erzeugen um false Positives aufzuräumen, aber ich fand den Aufwand für den Nutzer sehr vertretbar:

https://drmemory.org/

Re: Memory Leak Detection

Verfasst: 11.07.2021, 22:00
von Mirror
Danker für den Link. Ich habe Dr.Memory auch mittels Google gefunden gehabt. Ich habe aber gestern mit der Deleaker Demo Erfolg gehabt. Die Demo Version hat zwar die Zeile nicht angezeigt, aber in dem Quelltext hatte ich nur im Konstruktor ein anderes Objekt mittels new erzeugt.
Leider ist Deleaker relativ teuer.