Kurs C
menu C#
Dynamiczne listy w C i funkcja malloc() |
W języku C nie ma czegoś takiego jak zdefiniowana Lista obiektów, ale można sobie samemu stworzyć coś przypominającego listę używając struktur, wskaźników i funkcji malloc() oraz free(). Aby lepiej zrozumieć ten problem przedstawię program w którym pokaże jak stworzyć strukturę w strukturze i połączyć różne struktury ze sobą. Następnie poszerzę ten program o dynamiczne przydzielanie pamięci za pomocą funkcji malloc(). Program statycznej listy oraz jej wyświetlenie zaprezentowałem poniżej: Jak można zauważyć struktura "czlowiek" ma 3 wartości "nazwe", "wiek" i "nastepny", gdzie pole "nastepny" wskazuje na strukturę "czlowiek". Dzięki takiemu rozwiązaniu możemy przypisać jedną strukturę do drugiej. W programie stworzyliśmy na sztywno 3 struktury o nazwach pierwszy, drugi i trzeci, a następnie przypisaliśmy je do siebie ustalając tym samym kolejność. Niestety w tym programie wszystkie struktury tworzone są statycznie w kodzie, w ten sposób kompilator wie ile miejsca trzeba zarezerwować. Aby program przydzielał dynamicznie pamięć w czasie działania programu należy użyć funkcji malloc(). W następnym przykładzie pokazałem kod, który pyta się użytkownik o ilość zmiennych, które będą wprowadzane. W tym przykładzie pamięć jest rezerwowana dynamicznie w trakcie działania programu za pomocą malloc() w funkcji stworz(). Dobrym zwyczajem jest zwalnianie pamięci, gdy już jej nie potrzebujemy, dlatego utworzyłem także funkcje czysc(). Po odpaleniu programu powinniśmy uzyskać taki efekt: Użytkownik podaje ile osób chce wprowadzić, a następnie wpisuje nazwy i wiek tych osób. Gdy wpiszemy wszystkie osoby, to program wyświetli je, a następnie usunie za pomocą funkcji czysc() w której jest użyta funckcja free(). Następnie zakończy działanie programu. Oczywiście, gdy program zostanie zamknięty, to system operacyjny sam zwolni pamięć, która była wykorzystywana przez dany program. |