free
oprócz czyszczenia pamięci wstawiała pod wskaźnik wartość NULL
. Jednak takie działanie nie jest objęte standardem, więc nie działa to na wszystkich kompilatorach. Dlatego funkcja clear_node
powinna wyglądać następująco:
void clear_node(Node * x)
{
/* tutaj jakiś kod */
free(x);
x = NULL;
/* dalsza część kodu */
}
Oczywiście linijka x = NULL;
działa na zmiennej lokalnej x
, więc pamięć zostanie zwolniona, ale NULL
nie zostanie podstawione do węzłów, dla których wywołano tę funkcję. Dlatego należy ją zdefiniować następująco:
void clear_node(Node ** x)
{
/* tutaj jakiś kod */
free(*x);
*x = NULL;
/* dalsza część kodu */
}
Wtedy wszystko powinno być ok.