malloc | <STDLIB.H> |
Służy do dynamicznego przydziału pamięci. Przydzielany blok pamięci nie może przekroczyć 64 KB. Ponieważ funkcja jest typu void, to każdorazowo musimy dokonać konwersji na typ zmiennej, której pamięć przydzielamy. |
Składnia: | void *malloc(size_t ile); |
gdzie: | ile - ilość bajtów pamięci przydzielonych zmiennej |
Zwracana wartość: | Funkcja zwraca wskaźnik do przydzielonego zmiennej obszaru pamięci. |
Przykład: |
#include <stdio.h>
#include <alloc.h>
#include <string.h>
void main(void)
{ char *str;
// przydzielenie pamięci dla zmiennej
if ((str = (char *) malloc(15)) == NULL)
{ printf("Brak wolnej pamięci\n");
return;
}
strcpy(str, "Test malloc"); // skopiowanie tekstu do zmiennej
printf("Zmienna zawiera: %s\n", str);
free(str); // zwolnienie przydzielonej pamięci
}
|
calloc | <STDLIB.H> |
Rezerwacja pamięci dla tablicy o określonej ilości elementów, z których każdy ma stały rozmiar. Funkcja bardzo przydatna, gdy potrzebujemy w programie tablicy, ale w chwili pisania go nie wiemy jeszcze jaki rozmiar tablicy będzie nam potrzebny. |
Składnia: | void *calloc(size_t n, size_t bajtów); |
gdzie: | n - ilość tworzonych elementów tablicy bajtów - rozmiar pojedynczego elementu tablicy w bajtach |
Zwracana wartość: | Funkcja zwraca wskaźnik do przydzielonego zmiennej obszaru pamięci. |
Przykład: |
#include <stdio.h>
#include <alloc.h>
void main(void)
{ double *d;
// przydział pamięci dla 100 elementów typu double
d = (double *) calloc(100, sizeof(double))
...
free(str); // zwolnienie przydzielonej pamięci
}
|
realloc | <STDLIB.H> |
Funkcje zmienia rozmiar pamięci przydzielony wcześniej zmiennej funkcjami malloc, callock lub realloc. Nowy obszar może znajdować się w innym miejscu pamięci, ale kopiowana jest do niego zawartość dotychczas przydzielonej pamięć. Jeżeli zmienna, której przydzielany pamięć wskazuje na NULL, to funkcja realloc działa identycznie, jak funkcja malloc. |
Składnia: | void *realloc(void *blok, size_t ile); |
gdzie: | blok - dotychczasowy adres zmiennej; ile - nowa wielkość przydzielonej pamięci w bajtach. |
Zwracana wartość: | Funkcja zwraca wskaźnik do przydzielonego zmiennej nowego obszaru pamięci. |
Przykład: |
#include <stdio.h>
#include <alloc.h>
#include <string.h>
void main(void)
{ char *str;
str = (char *) malloc(10); // przydział pamięci do zmiennej
strcpy(str, "Tekst nr 1");
printf("Zmienna: %s\n Adres zmiennej: %p\n", str, str);
str = (char *) realloc(str, 30);
strcat(str, " i dopisany łańcuch"); // zwiększenie przydzielonej pamięci
printf("Zmienna: %s\n Adres zmiennej: %p\n", str, str);
free(str); // zwolnienie pamięci
}
|
free | <STDLIB.H> |
Zwalnia pamięć, która została wcześniej przydzielona zmiennej którąś z funkcji: malloc, calloc lub realloc. |
Składnia: | void free(void *block); |
gdzie: | blok - wskaźnik do zmiennej, której pamięć zwalniamy. |
Zwracana wartość: | brak |
Przykład: |
#include <stdio.h>
#include <alloc.h>
#include <string.h>
void main(void)
{ char *str;
double *d;
// przydział pamięci dla zmiennej d
d = (double *) calloc(100, sizeof(double))
// przydział pamięci dla zmiennej str
str = (char *) malloc(10);
...............
free(str); // zwolnienie pamięci zmiennej str
free(d); // zwolnienie pamięci zmiennej d
} |