This is an old revision of the document!
W języku C można wyróżnić dwie podstawowe metody alokacji (przydzielania) pamięci:
static
), lub po zakończeniu programuint a; char str[] = "Hello!"; float tab[5];
int* tab = (int*) malloc(5 * sizeof(int)); free(tab);
Dynamiczna alokacja pamięci pozwala przede wszystkim na:
Funkcja malloc()
(od memory allocation) rezerwuje blok wolnej pamięci o zadanym rozmiarze (w bajtach) i zwraca adres jego pierwszego bajtu. W przypadku nieznalezienia wymaganego obszaru malloc()
zwraca wskaźnik zerowy (dla przypomnienia – wskaźnik o wartości 0
).
Ponieważ rezerwowany blok może być zmienną dowolnego typu, funkcja ta zwraca uniwersalny “wskaźnik na void
”. Choć można go przypisać bezpośrednio do wskaźnika pożądanego typu, do dobrego tonu należy zastosowanie w tym przypadku operatora rzutowania (poprawia to czytelność).
Aby utworzyć tablicę typu double
o zadanym rozmiarze z użyciem funkcji malloc()
można napisać następujący kod:
int n = 10; double* tab = (double*) malloc(n * sizeof(double));
Powyższy kod zarezerwuje obszar pamięci dla 10 wartości typu double
i przypisze adres wskaźnikowi tab
. Zauważ, że zmienna tab
została zadeklarowana jako wskaźnik do pojedynczej wartości double
, a nie do bloku 10 takich wartości. Dlaczego? Ponieważ nazwa tablicy jest zarazem adresem jej pierwszego elementu, powyższe przypisanie umożliwia korzystanie z tab
jak ze zwykłej nazwy tablicy (np. tab[0]
to wartość jej pierwszego elementu).