Weil der Zeiger nach Wert in Ihre Funktion kopiert wird. Sie weisen NULL
der lokalen Kopie der Variablen ( ptr
) zu. Dies weist es nicht der ursprünglichen Kopie zu.
Der Speicher wird weiterhin freigegeben, sodass Sie nicht mehr sicher darauf zugreifen können, aber Ihr ursprünglicher Zeiger ist nicht NULL
.
Dies ist genauso, als würden Sie stattdessen int
an eine Funktion übergeben. Sie würden nicht erwarten, dass das ursprüngliche int
von dieser Funktion bearbeitet wird, es sei denn, Sie übergeben einen Zeiger darauf.
Wenn Sie den ursprünglichen Zeiger auf Null setzen möchten, müssen Sie einen Zeiger auf Zeiger übergeben:
%Vor% Sie übergeben den Zeiger a
nach Wert, so dass er nicht durch die Funktion geändert wird. Es ist nur eine Kopie des in der Funktion geänderten Zeigers, der ursprüngliche Variablenwert ist nicht betroffen.
Aktualisierung:
Wenn Sie Ihr Leben einfacher machen möchten, indem Sie das Freigeben + Nullen einer Variablen durch eine einzelne Codezeile ersetzen, benötigen Sie entweder ein Makro:
%Vor%oder eine Funktion mit Zeiger auf Zeigerargument:
%Vor%Zeiger werden als ganze Zahlen irgendwo im Speicher gespeichert.
Wenn Sie a = malloc(10);
, a
einen Wert haben, sagen Sie 0x1.
Wenn Sie getFree(a);
aufrufen, kopiert die Funktion a
in void *ptr
.
Jetzt a=0x1
und ptr=0x1
.
Wenn Sie ptr=NULL
ausführen, wird nur ptr
zu NULL geändert, aber a
ist immer noch 0x1 ..
Sie übergeben den Zeiger nach Wert .. (Standardmäßig übergibt C das Argument nach Wert), was bedeutet, dass Sie nur die Kopie aktualisieren .. nicht die tatsächliche Position .. dafür müssen Sie möglicherweise Zeiger auf Zeiger in C verwenden
%Vor%