Ich habe das Problem, dass meine Anwendung ein unendlich wachsendes Memory Leak hat, das nicht erkannt wird. Was ich sehr vereinfacht tue, ist, ein Objekt zu erstellen, eine Methode darauf auszuführen und dann das Objekt zu löschen. Jedes Mal, wenn ich dies tue, wächst der Speicherverbrauch im TaskManager um etwa 50-100MB. Dies erschöpft nach einigen Durchläufen meinen gesamten Speicher. Ich mache das mit Multithreading, aber es gibt keine statischen Variablen, so dass es keine Kollisionen zwischen den verschiedenen Objekten in meinen Threads gibt. Sie verwenden nur statische Methoden anderer Objekte, die keinen anderen Speicher als den in den Parametern übergebenen verändern - es ist also thread-sicher. Ich habe versucht, den Grund dafür herauszufinden:
- Ich verwende crtdbg.h (CRT-Memeory-Leak-Detection), aber es gibt nur Lecks, die seit dem Start meiner Anwendung existieren - sie werden beim Herunterfahren gelöscht und sind nicht so groß.
- Ich habe nach den virtuellen Destruktoren in allen Objekten gesucht, von denen ich erbe, aber sie sind alle OK
Was kann ich noch versuchen, um herauszufinden, wo meine Bewerbung undicht ist? Ich kann keine Lecks im HEAP finden und ich kenne keine anderen Gründe als das Destruktorproblem, das Lecks im STACK verursachen kann (damit meine ich, dass ein Objekt ein lokales std::string-Objekt nicht zerstört, das Platz im Heap zugewiesen hat). Ich weiß nicht, ob es noch andere Gründe für "STACK-Leaks" gibt, aber ich weiß, dass es in den Teilen meiner Methode, in denen der Speicher am meisten wächst, keine HEAP-Allokation gibt.