Beispiel für ein memory leak in c++ (durch die Verwendung von Ausnahmen)
In C++ How to Programm es einen Absatz gibt, die sagen:
Üblich, Programmierung besteht in der Allokation von dynamischem Speicher zuweisen der Adresse
dass der Speicher für einen Zeiger, verwenden Sie den Mauszeiger zu manipulieren, um die Speicher-und ausplanen der
Speicher mit löschen, wenn der Speicher nicht mehr benötigt wird. Wenn eine Ausnahme Auftritt, nachdem
erfolgreiche Speicherreservierung aber bevor die delete-Anweisung ausgeführt wird, kann ein Speicherverlust
auftreten konnte. Der C++ - standard sieht Klasse Vorlage unique_ptr im header
mit dieser situation umzugehen.
Alle auf könnte mir vorstellen ein echtes Beispiel, dass Ausnahmen auftreten und Speicher-Leck wie dieser Beitrag?
- Ich denke, einige Leute brauchen, um neu zu bewerten Ihre interpretation von "Nicht eine wirkliche Frage"...
- 3 verschiedene in der Nähe Stimmen. Vielleicht sollte ich warf einen 4. (unterschiedlich) ein. 😛
- Hier sind Sie 🙂
Du musst angemeldet sein, um einen Kommentar abzugeben.
Siehe auch: C++ : mit den Ressourcen um, wenn Konstruktoren kann exceptions werfen (Verweis auf FAQ 17.4]
MyClass* ptr = new MyClass(true);
wird nicht Auslaufen, wenn der Konstruktor eine exception wirft.new
unddelete
im letzten Beispiel sind irreführend. Auchnew
undmalloc
im gleichen Programm?int main() {MyClass A;}
und der memory leak würde noch auftreten. Das Leck ist inMyClass
, nicht in dieser Funktion.Etwas subtiler Beispiel.
Nehmen eine naive Implementierung einer Klasse hält zwei dynamisch zugewiesenen arrays:
Nun, wenn wir eine Ausnahme, weil wir call-Methode
Bar
irgendwo, alles ist gut - die stack-unwinding GEWÄHRLEISTUNGEN, dief
's Destruktor aufgerufen wird.Aber wenn wir ein
bad_alloc
beim initialisierensecond
, lecken wir den Speicher, derfirst
Punkte zu.Wenn der Aufruf
some_function_which_may_throw(p)
eine Ausnahme wirft, lecken wir den Speicher verweistp
.func
real_example
statt. Nachdem alle, die OP hat Fragen für ein echtes Beispiel 😉Einfaches Beispiel
Weniger erfundenes Beispiel, vor kurzem fand ich dieses Potenzial Leck in meinem code bei der Zuteilung von Knoten mit einer bestimmten Zuweisung Objekt.
Ist es weniger offensichtlich, wie man dieses Problem beheben, weil der Puffer, aber mit Hilfe habe ich es:
Kompilieren von Code hier