Deprecated: Function set_magic_quotes_runtime() is deprecated in /DISK2/WWW/lokiware.info/mff/wakka.php on line 35
Dynamické proměnné
- Jakoby další druh proměnných vedle globálních a lokálních:
- globální (statické) proměnné v datovém segmentu,
- lokální proměnné na zásobníku (stack),
- dynamické proměnné na haldě (heap).
- Datová analogie rekursivního volání funkcí.
- Datové struktury, které odkazují na jiné datové struktury (v zásadě stejného typu).
- Zápis pomocí závorek nebo zakreslení zapouzdřenými obdélníčky (obláčky, ...).
- Je také třeba rekursi (odkazování) nějak ukončit/podmínit — variantnost.
- proměnná velikost
- Používají se smerníky (česky ukazatele)
Příklad
*
SpojovýSeznam
Dynamická (de)alokace v Pascalu
New() & Dispose()
Chci dostat přiděleno místo v paměti (
alokovat ho) a uložit si její adresu do paměti:
Deprecated: Assigning the return value of new by reference is deprecated in /DISK2/WWW/lokiware.info/mff/formatters/highlight/pascal.php on line 5
var p: ^typ;
{...}
New(p);
Chci uvolnit (uvolnit pro další použití,
dealokovat) přidělenou paměť:
Deprecated: Assigning the return value of new by reference is deprecated in /DISK2/WWW/lokiware.info/mff/formatters/highlight/pascal.php on line 5
Pozor: Ukazatel teď ukazuje kamsi, musím do něj uložit nulový
Ukazatel:
Deprecated: Assigning the return value of new by reference is deprecated in /DISK2/WWW/lokiware.info/mff/formatters/highlight/pascal.php on line 5
New() & Mark() & Release()
Mark(p) mi do
p uloží vrchol haldy.
Release(p) určí vrchol zásobníku na adresu
p. Nevhodné kombinovat s
Dispose() (je asi jasné proč).
GetMem() a FreeMem()
Deprecated: Assigning the return value of new by reference is deprecated in /DISK2/WWW/lokiware.info/mff/formatters/highlight/pascal.php on line 5
GetMem(ukazatel, pocetBajtu); { alokace }
FreeMem(ukazatel, pocetBajtu); { dealokace }
Typicky je
pocetBajtu vyraz ve tvaru
pocet * SizeOf(neco), abych alokoval pole o poctu
pocet prvku typu stejneho jako
neco.