Table of Contents

Dynamická práce s pamětí

Přetypování ukazatelů

Přestože jsou ukazatele při deklaraci vztaženy ke konkrétnímu datovému typu, umožňuje jazyk C definovat také ukazatel (ukazatel na typ void), který není vázán ke konkrétnímu typu.

S takovým ukazatele pak lze některé operace provádět pouze při uvedení explicitní konverze. V praxi se tyto ukazatele používají převážně při deklaracích a definicích funkcí, které pracují s daty libovolných typů. Příklad:

void *moje_pamet;
((int *)moje_pamet)++;

Funkce pro práci s pamětí

Všechny níže uvedené funkce jsou definovány v knihovně stdlib.h. Při výpočtu velikosti bloku se v praxi hojně využívá operátor sizeof. Pokud není možné paměť alokovat, vrací níže uvedené funkce hodnotu NULL (ukazatel na nulovou adresu).

malloc

void *malloc(size_t size);
Funkce alokuje paměť velikosti size a vrátí ukazatel na danou oblast paměti.

calloc

void *calloc(size_t items, size_t size);
Funkce alokuje paměť pro items prvků o velikosti size (tedy items*size bytů), navíc tuto paměť vyplní nulami.

realloc

void *realloc(void* old, size_t size);
Funkce zajišťující změnu velikosti dříve alokovaného bloku paměti old na velikost size. Data původního bloku paměti budou zkopírována do nově alokovaného.

free

void free(void* block);
Funkce pro uvolnění paměti block. Používá se vždy, když víme, že už danou paměť nebudeme v programu používat.

Praxe

—- cc,upol