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

  • neuvolňování paměti vzniká tzv. memleak
  • kontrola: statická splint, runtime: valgrind
  • defacto sem patří i strdup

—- cc,upol

jazykc/dynamicka-prace-s-pameti.txt · Last modified: 2014/12/03 23:01 (external edit)
CC Attribution-Noncommercial-Share Alike 4.0 International
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0