ForestP napisał(a):
Czy funkcja first nie nadpisze danych gdy jest podany ten sam wskaźnik podczas wywoływania po raz drugi ?
Zakładam, że piszesz o tej linijce pętli (linia 24):
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Po pierwsze, do funkcji przekazywana jest ta sama zmienna (
root), ale jej wartość po każdym obiegu pętli jest inna, ponieważ - po zakończeniu działania funkcji
first() - zmiennej
root przypisywana jest wartość zwrócona przez tę funkcję.
Po drugie, Twoje obawy nadpisywania danych są nieuzasadnione, ponieważ to nawet nie ma znaczenia jaki wskaźnik przekażesz do funkcji
first(). Przydzielaniem pamięci zajmuje się funkcja
malloc(), która w żaden sposób nie jest zależna od przekazywanego do funkcji
first() wskaźnika (linia 10):
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Funkcja
mallloc() wynajduje tylko wolny obszar pamięci o odpowiednim rozmiarze, zwraca wskaźnik do tego obszaru i przypisuje go do zmiennej lokalnej
a (
będącej wskaźnikiem do zmiennej typu struct node). Jednocześnie alokowany obszar zostaje oznaczony jako zajęty (
przynajmniej do momentu wywołania funkcji free(), która go zwolni), więc przy następnym wywołaniu funkcji
malloc() jest przez nią pomijany. Nie ma więc możliwości, że coś zostanie nadpisane.