Wskaźniki a zmienne lokalne

0

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?

1
 element* usuwanie(struct element *K)
{
   if(!K) return K;
   struct element *H=K->next;
   free(K);
   return H;
}

Ponazywaj te zmienne normalnie i sensowanie a nie "cos_tam", trzeba sie doomyslac.
*lista=tmp; powoduje przypisanie dla wskaznika na poczatek listy wartosci zmiennej tmp.
Dlatego wlasnie korzystasz z podwojnego wskaznika zeby moc operowac na zmiennej,
ktora jest w innym obszarze pamieci. Ja przesylam swoja funkcje bez podwojnego wskaznika.

0

*lista=tmp; powoduje przypisanie dla wskaznika na poczatek listy wartosci zmiennej tmp.

No tak, racja. Dzięki wielkie.

dodanie znacznika <quote> - @furious programming

1 użytkowników online, w tym zalogowanych: 0, gości: 1