Warning: Declaration of action_plugin_subjectindex_indexer::register(&$controller) should be compatible with DokuWiki_Action_Plugin::register(Doku_Event_Handler $controller) in /data/web/virtuals/28604/virtual/www/subdom/bo/lib/plugins/subjectindex/action/indexer.php on line 15
Warning: Declaration of action_plugin_mathjax_enable::register(Doku_Event_Handler &$controller) should be compatible with DokuWiki_Action_Plugin::register(Doku_Event_Handler $controller) in /data/web/virtuals/28604/virtual/www/subdom/bo/lib/plugins/mathjax/action/enable.php on line 62
Warning: Declaration of action_plugin_googleanalytics::register(&$controller) should be compatible with DokuWiki_Action_Plugin::register(Doku_Event_Handler $controller) in /data/web/virtuals/28604/virtual/www/subdom/bo/lib/plugins/googleanalytics/action.php on line 40
Warning: Declaration of action_plugin_folded::register(&$controller) should be compatible with DokuWiki_Action_Plugin::register(Doku_Event_Handler $controller) in /data/web/virtuals/28604/virtual/www/subdom/bo/lib/plugins/folded/action.php on line 40
Warning: Declaration of action_plugin_hidden::register(&$controller) should be compatible with DokuWiki_Action_Plugin::register(Doku_Event_Handler $controller) in /data/web/virtuals/28604/virtual/www/subdom/bo/lib/plugins/hidden/action.php on line 28
Warning: Declaration of action_plugin_include::register(&$controller) should be compatible with DokuWiki_Action_Plugin::register(Doku_Event_Handler $controller) in /data/web/virtuals/28604/virtual/www/subdom/bo/lib/plugins/include/action.php on line 354
Warning: Declaration of action_plugin_tag::register(&$contr) should be compatible with DokuWiki_Action_Plugin::register(Doku_Event_Handler $controller) in /data/web/virtuals/28604/virtual/www/subdom/bo/lib/plugins/tag/action.php on line 175
Warning: Cannot modify header information - headers already sent by (output started at /data/web/virtuals/28604/virtual/www/subdom/bo/lib/plugins/subjectindex/action/indexer.php:15) in /data/web/virtuals/28604/virtual/www/subdom/bo/inc/auth.php on line 532
Warning: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead in /data/web/virtuals/28604/virtual/www/subdom/bo/inc/auth.php on line 818
Warning: Cannot modify header information - headers already sent by (output started at /data/web/virtuals/28604/virtual/www/subdom/bo/lib/plugins/subjectindex/action/indexer.php:15) in /data/web/virtuals/28604/virtual/www/subdom/bo/inc/actions.php on line 656
Warning: Cannot modify header information - headers already sent by (output started at /data/web/virtuals/28604/virtual/www/subdom/bo/lib/plugins/subjectindex/action/indexer.php:15) in /data/web/virtuals/28604/virtual/www/subdom/bo/inc/actions.php on line 656
Warning: Cannot modify header information - headers already sent by (output started at /data/web/virtuals/28604/virtual/www/subdom/bo/lib/plugins/subjectindex/action/indexer.php:15) in /data/web/virtuals/28604/virtual/www/subdom/bo/inc/actions.php on line 656
====== Dynamická práce s pamětí ======
* [[dox>dynamicka-prace-s-pameti/dynamicky-zasobnik.c|Dynamický_zásobník]]
* [[dox>dynamicka-prace-s-pameti/spojeni-textovych-retezcu.c|Spojení_textových_řetězců]]
======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ě [[:c:stdlib.h]].
Při výpočtu velikosti bloku se v praxi hojně využívá operátor [[:c: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 [[:c:string.h#strdup]]
----
cc,upol