Wie kann man den Speicherplatz des Zeigers im Speicher freigeben?

8

Ich habe Fragen über Zeiger in C. Jeder Zeiger hat 4 Bytes im Speicher (Adresse). Wenn ich malloc () aufrufe, wird nur Speicher zugewiesen und seine Adresse dem Zeiger zugewiesen, auch gibt free () nur den Speicher frei, auf den der Zeiger zeigt. Aber wie kann ich Zeiger (4 Bytes) im Speicher löschen, die ich nicht mehr benötige? Gibt es kein Speicherleck?

    
Zaffy 03.07.2011, 20:54
quelle

5 Antworten

12

Der Zeiger selbst ist eine reguläre Variable, was bedeutet, dass, wenn er außerhalb des Gültigkeitsbereichs liegt, diese 4 zugewiesenen Bytes automatisch freigegeben werden, genau wie jede andere Variable, die Sie möglicherweise für denselben Bereich deklariert haben.

    
karlphillip 03.07.2011, 20:55
quelle
7

Die Zeigervariable selbst hat in der Regel eine automatische Speicherdauer, d. h. sie befindet sich auf dem Stapel, so dass der von ihr eingenommene Speicher zurückgewonnen und wiederverwendet wird, sobald die Variable den Gültigkeitsbereich verlässt.

    
Kerrek SB 03.07.2011 20:56
quelle
3

Normalerweise wird der Zeiger in einer Stapelvariablen gehalten. Oder zurückverfolgt durch Heap-zugeordnete Zeiger auf eine Stapelvariable. Der Stapel wird statisch zugewiesen und freigegeben, wenn der Prozess beendet wird. So ist nichts durchgesickert.

    
David Heffernan 03.07.2011 20:59
quelle
2

Ein Zeiger ist nur eine normale Variable und hat dieselbe Lebensdauer wie eine normale Variable an seiner Stelle. I es ist eine lokale nicht-statische Variable, ihre Lebensdauer endet, wenn sie den Gültigkeitsbereich verlässt. Wenn es sich um eine Variable mit statischer Speicherdauer handelt, endet ihre Lebensdauer mit dem Ende des Programms. Wenn sie sich auf dynamisch zugewiesenem Speicher befindet, endet ihre Lebensdauer, wenn dieser Speicher freigegeben wird, und für den zukünftigen C1x-Standard endet ihre Lebensdauer, wenn der Thread endet, wenn der Thread endet.

    
ninjalj 03.07.2011 21:02
quelle
-1

in einer Nuss-Shell .. Sie können nicht eine Pointer-Position oder Speicher durch einen Code oder Befehl frei .. für Sie wollen möglicherweise ein perfektes Programm von Codes .. mit akuten Speicherverbrauch .. ich bekomme es. .aber du kannst nicht .. Danke ..

    
Akash 13.08.2017 14:23
quelle