.[ ČeskéHry.cz ].
Uvolnění dynamické paměti na konci kódu

 
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> C / C++
Zobrazit předchozí téma :: Zobrazit následující téma  
Autor Zpráva
Aroidzap



Založen: 14. 11. 2011
Příspěvky: 68

PříspěvekZaslal: 14. listopad 2011, 19:44:34    Předmět: Uvolnění dynamické paměti na konci kódu Odpovědět s citátem

Dobrý den, chtěl bych se zeptat, jestli má cenu na konci kódu uvolnit dynamickou pamět.

kód:
int main()
{
     int *pamet=new int[1024];

     delete *pamet;
     return 0;
}


Prostě jestli má uvolnění paměti na konci nějaký význam.

Předem děkuji. Tomáš
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Marek



Založen: 28. 07. 2007
Příspěvky: 1782
Bydliště: Velká Morava

PříspěvekZaslal: 14. listopad 2011, 19:55:38    Předmět: Odpovědět s citátem

Ne. Na konci procesu se zruší i všechna jeho pamět. Ale pouze na konci procesu. Uzavřou se i otevřené soubory a uvolní se všechny zdroje, které si aplikace sama naalokovala a které nejsou sdílené s jinými procesy.

Jinak ten kód je špatně. Správně má být:

delete [] pamet;

Obecně je lepší ale vše uvolňovat, protože různé automatické detektory memory leaků pak nebudou moc užitečné, pokud neuvolňuješ paměť schválně.
_________________
AMD Open Source Graphics Driver Developer
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Aroidzap



Založen: 14. 11. 2011
Příspěvky: 68

PříspěvekZaslal: 14. listopad 2011, 20:00:00    Předmět: Odpovědět s citátem

Takže se pak třeba může stát že ukončím program a zůstane mi zaplněná paměť?

A když už jsme u té chyby, myslel jsem že [] se dá vždy nahradit *
Takže delete je vyjímka?
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
OndraSej



Založen: 28. 07. 2007
Příspěvky: 767
Bydliště: Brandýs nad Labem

PříspěvekZaslal: 14. listopad 2011, 20:19:05    Předmět: Odpovědět s citátem

Aroidzap> Jak psal Marek - pamet se na konci sice "uvolni" sama, ale je vhodne ji uvolnit rucne nejen kvuli memory leakum, ale take proto, ze se ti velice snadno muze stat, ze se z programu stane knihovna nebo ze tu cast, ktera neuvolnovala pamet budes volat behem behu programu opakovane a dodavat spravnou spravu pameti do existujiciho kodu je tezsi nez kdyz s ni pocitas dopredu.

A hlavne, s pouzitim RAII a smart pointeru z Boost (resp. z noveho standardu) se da udelat celkem jednoduse a slusne.

Rozdil mezi delete a delete[] je v tom, jak se volaji destruktory na objektech v poli. Resp. v tom, ze delete zavola destruktor jen na tom prvnim, zatimco delete[] by je melo zavolat na vsech objektech v poli.

U pole intu asi projde oboji (int nema destruktor, takze se jenom uvolni pamet), coz ale nic nemeni na tom, ze spravne ma na poli byt delete[]. Kompliator sice nenadava (casto sam nemuze behem kompilace rozeznat pole od pointeru), ale memory checkery muzou.
_________________
http://trionteam.net
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Aroidzap



Založen: 14. 11. 2011
Příspěvky: 68

PříspěvekZaslal: 14. listopad 2011, 20:48:23    Předmět: Odpovědět s citátem

Mockrat diky za vysvetleni Wink
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Slappy



Založen: 31. 07. 2009
Příspěvky: 169
Bydliště: Zilina

PříspěvekZaslal: 15. listopad 2011, 06:52:22    Předmět: Odpovědět s citátem

Uvolnovat pamat na konci programu je uz neskoro! Very Happy

Zakladne pravidlo [aspon ako som sa to ucil ja]: uvolnit pamat akonahle uz nie je potrebna.
_________________
Skinovane instalatory pre NSIS a Inno Setup, zdarma pre SK/CZ projekty: www.graphical-installer.com
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Zobrazit příspěvky z předchozích:   
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> C / C++ Časy uváděny v GMT + 1 hodina
Strana 1 z 1

 
Přejdi na:  
Nemůžete odesílat nové téma do tohoto fóra
Nemůžete odpovídat na témata v tomto fóru
Nemůžete upravovat své příspěvky v tomto fóru
Nemůžete mazat své příspěvky v tomto fóru
Nemůžete hlasovat v tomto fóru


Powered by phpBB © 2001, 2005 phpBB Group


Vzhled udelal powermac
Styl "vykraden" z phpBB stylu MonkiDream - upraveno by rezna