new & delte & mem Leaks
-
Hi
Ich suche überladungen für den globalen new und delte Operator in C++, die Überladungen sollen loggen, ob Memory Leaks entstehen.
Hat da jemand vielleicht eine Empfehlung?
-
Warum nimmst du keinen Profiler?
-
Bin mir grad net sicher ob man die Teile überhaupt auch Profiler nennt, ich mein eben sowas wie valgrind.
-
google mal nach Smart-Pointer für die Speicher-Verwaltung - "Smart-Pointer"
-
Nein, ich will keine Smartpointer!
-
Ich habe mal was im Flippcode Archiv gefunden, was aber nicht funktioniert!
-
zählen, ob delete und new gleich oft aufgerufen werden?
-
Tc++H schrieb:
Ich habe mal was im Flippcode Archiv gefunden, was aber nicht funktioniert!
War das das, wo entsprechende Makros benutzt wurden? Nach dem Motto
#define DEBUG_NEW new(...) #define new DEBUG_NEWDas hat zwei Nachteile. Zum einen funktioniert placement new nicht mehr. Und zum anderen kann operator new/delete nicht mehr überladen werden. Problem 1 kann man zumindest umgehen, zB mit einer Helper Klasse und überladenem Operator
#define new_ new_helper(...) * new #define new new_Problem 2 bleibt aber.
Ansonsten, was für konkrete Empfehlungen brauchst du denn? Überlade operator new/delete, speichere bei new jeden Zeiger in einer Liste, bei delete löscht du ihn aus der Liste. Besondere Behandlung gibt es für Nullzeiger. Speicherlecks hast du, wenn am Ende noch Einträge in der Liste vorhanden sind oder Einträge aus der Liste gelöscht werden sollen, die gar nicht vorhanden sind.
Der einzige Vorteil der new/delete Makros ist, dass du Datei/Zeile/Funktion loggen kannst. Ist natürlich vorteilhaft, um die betreffenden Stellen zu finden. Wirklich notwendig ist es allerdings nicht, um generell festzustellen, ob Speicherlecks überhaupt vorhanden sind.
-
Und gibt es sonst noch irgendwelche möglichkeiten, ohne Zudatzlibs oder Smartpointer, denn man nimmt ja auch nicht für alles Smartpointer.
-
Wie findet ihr das hier?