C/Wskaźniki: Różnice pomiędzy wersjami

Dodane 256 bajtów ,  1 rok temu
m
 
 
=== Obsługa pamięci ===
Podstawową funkcją do '''rezerwacji pamięci''' jest funkcja [[C/malloc|malloc]]. Jest to niezbyt skomplikowana funkcja - podając jej rozmiar (w bajtach) potrzebnej pamięci, dostajemy wskaźnik do zaalokowanego obszaru.
 
Załóżmy, że chcemy stworzyć tablicę liczb typu float:
 
Jeśli dany obszar pamięci nie będzie już nam więcej potrzebny powinniśmy go zwolnić, aby system operacyjny mógł go przydzielić innym potrzebującym procesom.
 
Do zwolnienia obszaru pamięci używamy funkcji <tt>[[C/free|free()]]</tt>, która przyjmuje tylko jeden argument - wskaźnik, który otrzymaliśmy w wyniku działania funkcji <tt>malloc()</tt>.
 
'''Do zwolnienia obszaru pamięci''' używamy funkcji <tt>[[C/free|free()]]</tt>, która przyjmuje tylko jeden argument - wskaźnik, który otrzymaliśmy w wyniku działania funkcji <tt>malloc()</tt>.
<syntaxhighlight lang="C">
free (tablica);
Należy też uważać, by nie zwalniać dwa razy tego samego miejsca. Po wywołaniu free wskaźnik nie zmienia wartości, pamięć wskazywana przez niego może też nie od razu ulec zmianie. Czasem możemy więc korzystać ze wskaźnika (zwłaszcza czytać) po wywołaniu free nie orientując się, że robimy coś źle - i w pewnym momencie dostać komunikat o nieprawidłowym dostępie do pamięci. Z tego powodu zaraz po wywołaniu funkcji free można przypisać wskaźnikowi wartość 0.
 
Czasami możemy potrzebować '''zmienić rozmiar już przydzielonego bloku pamięci'''. Tu z pomocą przychodzi funkcja [[C/realloc|realloc]]:
<syntaxhighlight lang="C">
tablica = realloc(tablica, 2*rozmiar*sizeof(*tablica));
tablica[0] = 0.1;
</syntaxhighlight>
 
 
'''Inicjalizacja dynamicznej tablicy'''<ref>[https://stackoverflow.com/questions/17937623/initializing-c-dynamic-arrays stackoverflow question: initializing-c-dynamic-arrays]</ref>
 
memset (data, 0.0f , sizeof (float ) * rozmiar);
 
== Możliwe deklaracje wskaźników ==
6160

edycji