Załóżmy, że w funkcji muszę usunąć pierwszy element z listy. Każdy element listy ma zaalokowaną w innej funkcji pamięć.
.....
usuwanie(&lista);
......
void usuwanie(struct **lista)
{
.......
struct cos_tam *tmp;
tmp=(*lista)->next;
free(*lista);
*lista=tmp;
.....
}
Co się właściwie dzieje, gdy wykonam instrukcję *lista=tmp? Jako nowy początek listy zostaje wskazana zmienna tmp, która istnieje tylko w obrębie funkcji. Domyślam się, że poza funkcją obszar pamięci zmiennej tmp jest już dostępny bez ograniczeń i w miejsce wskazywane przez listę mogą wejść bzdury. Czy fakt, że mi to działa zawdzięczam wyłącznie szczęściu?