Portál AbcLinuxu, 10. května 2025 11:09

Dotaz: jazyk C - lokální proměnná, kdy dojde k uvolnění?

1.5.2011 14:40 jardík
jazyk C - lokální proměnná, kdy dojde k uvolnění?
Přečteno: 288×
Odpovědět | Admin
Dobrý den, pokud ve vlastní funkci (void) vytvořím lokální proměnnou, tak po vyskočení běhu programu z mé funkce (opustím scope) bude za jak dlouho uvolněna z paměti?

Jde mi o to, že používám jednu knihovnu a nahrávám obrázek. Maj i spešl funkci pro uvolnění té paměti (načtu obrázek- mám ukazatel- zobrazím si obrázek- proměnná je zbytečná, uvolňuji). Jde mi o to, jestli je tam nutné na konci té mé void funkce volat to uvolnění té proměnné, když vlastně vyskočím ze scope a lokální proměnná by se měla uvolnit sama ne?

V dokumentaci té funkce píšou, že by se o to měl programátor vždy postarat, aby nedocházelo k memory leakům- je o i tento případ?

Řešení dotazu:


Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

1.5.2011 15:34 rastos | skóre: 63 | blog: rastos
Rozbalit Rozbalit vše Re: jazyk C - lokální proměnná, kdy dojde k uvolnění?
Odpovědět | | Sbalit | Link | Blokovat | Admin
V C platí, že ak si pamäť alokoval volaním nejakej funkcie, tak by si ju mal uvolniť volaním zodpovedajúcej funkcie.

Ak vytvoríš lokálnu premennú vo funkcii, tak to vyzerá takto:

void fnc()
{
  int a=0;
}

Takáto premenná zaberá sizeof(int) bajtov v pamäti. Jej "alokovanie" robí systém a jej "dealokovanie" robí tiež systém a to automaticky a okamžite ako sa opustí scope jej platnosti. Slová alokovanie a dealokovanie sú v úvodzovkách, pretože ide len o vyhradenie miesta na stack-u.

Ak ale urobíš

void fnc()
{
 NEJAKY_TYP *a=AlokacnaFunkcia();
}

tak odalokovanie pamäte, ktorú zabrala "AlokacnaFunkcia()", za teba nikto neurobí. Musíš ho urobiť sám. Môžeš to urobiť v tej istej funkcii, alebo inej funkcii. To je jedno. Len hodnotu pointra, ktorú tá alokačná funkcia vrátila, budeš asi potrebovať dostať až na to miesto, kde zavoláš uvoľnenie.
1.5.2011 15:38 Filip Jirsák | skóre: 68 | blog: Fa & Bi
Rozbalit Rozbalit vše Re: jazyk C - lokální proměnná, kdy dojde k uvolnění?
Odpovědět | | Sbalit | Link | Blokovat | Admin
V té lokální proměnné pravděpodobně nemáte uložen celý obrázek, ale jen odkaz na něj. Takže po skončení funkce se uvolní ten odkaz, ale samotný obrázek zůstane v paměti, a protože na něj nevede žádný odkaz, neuvolní se až do konce běhu programu – je to klasický memoryleak. O uvolnění se tedy musíte postarat, a to i v případě, kdy dojde k nějaké chybě v té funkci.
1.5.2011 15:55 jardík
Rozbalit Rozbalit vše Re: jazyk C - lokální proměnná, kdy dojde k uvolnění?
Odpovědět | | Sbalit | Link | Blokovat | Admin
pecka, díky

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.