Problem polega na tym, że w niektórych wersjach kompilatora funkcja 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.