Visící ukazatel
Visící ukazatel v programovacích jazycích označuje ukazatel , který odkazuje na oblast paměti, která již není platná, protože již byla uvolněna nebo protože ukazatel je používán mimo kontext existence proměnné, na kterou odkazuje. Vzhledem k tomu, že operační systém může znovu přiřadit a znovu použít toto místo v paměti, použití visícího ukazatele přináší nepředvídatelné účinky, od chyby segmentace (systémy UNIX) nebo obecné chyby ochrany (systémy Windows) s následným ukončením aplikace, která chybu způsobila, kvůli poškození dat v paměti. [1]
Některé příčiny visícího ukazatele
V programovacích jazycích, jako je C , které vyžadují, aby se programátor postaral o uvolnění dynamicky alokované paměti, ukazatele, stejně jako všechny ostatní proměnné, nadále obsahují poslední přiřazenou hodnotu, i když tato hodnota není, je platnější. . Když je například paměť, na kterou ukazuje určitý ukazatel, uvolněna, nelze ji dále používat, aniž by byla znovu přiřazena do jiné oblasti paměti.
Příklad je uveden níže:
int * i = ( int * ) malloc ( sizeof ( int ));
/ * ... * /
volný ( i );
* i = 200 ; / * v tomto okamžiku již hodnota obsažená v i neodkazuje * na platnou oblast paměti! * /
Další příčinou visících ukazatelů, jak již bylo zmíněno, může být použití ukazatele, který odkazuje na proměnnou mimo kontext existence (nebo rozsahu) této proměnné.
Například:
int * i = NULL ;
{
int cont = 3 ;
i = & pokračování ;
/ * ... * /
* i = 2 ; / * je ekvivalentní zápisu cont = 2; * /
}
* i = 200 ; / * v tomto bodě cont již není platná proměnná, * takže i již neodkazuje na platnou oblast paměti! * /
Poslední příklad ukazuje další chybu (ve skutečnosti velmi podobnou té předchozí), která často způsobuje problémy s visícími ukazateli, to znamená s návratem na konec funkce, adresu lokální proměnné, již mimo samotnou funkci neplatí:
int * vrátí UnInt ()
{
int cont = 3 ;
návrat & pokračování ; / * ukazatel na pokračování není platný mimo tuto funkci! * /
}
Poznámky
- ^ Harvey M. Deitel, Paul J. Deitel, C++. Základy programování , Apogeo, 2005.
- ^ Paolo Santi, základy programování v C: ukazatele , na wwwold.iit.cnr.it , 22. prosince 2014. Staženo ve 12:45 .