In diesem Artikel wird erläutert, was a Speicherleck IS und geben Sie dann eine detaillierte Beschreibung zum Finden Speicherlecks in einem C ++ - Code oder Projekt.
Was ist ein Speicherleck
Ein Computerproblem namens a Speicherleck verursacht das Gedächtnis zugeteilt und unangemessen befreit. Wenn der Speicher innerhalb eines Programms nicht mehr vom Programm verwendet wird, sollte der Speicher an das Betriebssystem freigegeben werden, so. Wenn jedoch ein Programm den zugewiesenen Speicher nicht freigibt und nach der Nützlichkeit weiterhin darauf zugeht, Speicherlecks kann auftreten. Dies kann dazu führen, dass das Gedächtnis verzehrt wird oder 'durchgesickert'Bis dem System keinen kostenlosen Speicher mehr hat und das Programm abstürzt. Da alle Systeme eine begrenzte Menge an Speicher haben und der Speicher teuer ist, erhöht sich die Speicherauslastung eines Programms, wenn er enthält Speicherlecks. Daher wird es Probleme verursachen.
So finden Sie Speicherlecks in einem C ++ - Code oder einem Projekt?
Es gibt einige grundlegende Möglichkeiten, wie Sie Speicherlecks in einem C ++ - Code erkennen können.
1: Überprüfen Sie die Grundlagen der Betreiber
Kennen Sie die Grundlagen der Betreiber. Der neue Bediener weist einen Heap -Speicher zu. Der Heap -Speicher wird mit dem Löschbetreiber freigegeben. Um denselben Speicher zu veröffentlichen, der zugewiesen wurde, müssen Sie nach jedem neuen Löschen durchführen, sonst besteht die Chance Speicherleck.
2: Nur nach dem Löschen neu zutrennen
Richten Sie einen Speicher erst nach, nachdem Sie seine erste Zuweisung gelöscht haben. Wenn eine Variable eine neue Adresse für eine zweite Zuweisung erhält, wird die erste Adresse und die damit verbundenen Bytes dauerhaft verloren, was dazu führt Speicherleck.
3: Überprüfen Sie die zugewiesenen Zeiger
Beobachten Sie die zugewiesenen Zeiger. Jede dynamische Variable (Speicher auf dem Heap) muss an einen Zeiger angeschlossen werden. Es ist schwierig, eine dynamische Variable zu löschen, nachdem sie sich von ihrem Zeiger getrennt hat. Noch einmal, dies verursacht a Speicherleck.
4: Überprüfen Sie nach den örtlichen Zeigern
Verwenden Sie sorgfältig lokale Zeiger. Wenn Sie einen Zeiger in einer Funktion definieren, wird die dynamische Variable, auf die er verweist, auf dem Haufen zugewiesen, nicht auf dem Stapel. Es bleibt, wenn Sie es nicht entfernen, auch nachdem das Programm beendet ist Speicherlecks.
5: Verwenden Sie quadratische Klammern, nachdem Sie vorsichtig gelöscht werden
Beachten Sie die folgenden quadratischen Klammern “löschen“. Um ein einzelnes Element zu befreien, verwenden Sie selbst Löschen. Verwenden Sie zum Verlassen eines Heap -Arrays Löschen [] in quadratischen Klammern eingeschlossen.
Wie man Speicherlecks vermeidet?
Programm, um Speicherlecks zu vermeiden
Zum Beispiel:
#enthalten
#enthalten
Verwenden von Namespace STD;
void func_to_handle_mem_leak ()
int* ptr = new int (5);
Cout<
int main ()
func_to_handle_mem_leak ();
Rückkehr 0;
Der Zeiger Im obigen Programm wird nach seiner Zuweisung nicht gelöscht. Dies verursacht das Speicherleck Im obigen C ++ - Code.
#enthalten
#enthalten
Verwenden von Namespace STD;
void func_to_handle_mem_leak ()
int* ptr = new int (5);
Cout<löschen (ptr);
int main ()
func_to_handle_mem_leak ();
Rückkehr 0;
In diesem Code löschen wir den Zeiger daher in der benutzerdefinierten Funktion Speicherleck wird vermieden.
Ausgang
Abschluss
Speicherlecks innerhalb eines Programms kann nachteilige Ergebnisse erzielen, unabhängig davon, ob das Programm klein oder groß ist. Lösen Speicherlecks, Statische Analyse -Tools, diagnostische Tools und Debugging -Tools sind ein wesentlicher Bestandteil der Suche und Behebung des Problems. Daher sollten C ++ - Code oder Projekte regelmäßig untersucht und analysiert werden, um alle zu erkennen Speicherlecks, Mit den oben genannten Tools und Techniken können Sie die Speicherlecks in einem C ++ - Code mildern.