OT: C++ - jak zjistit zda nebyla uvolnena pamet pred destruovanimobjektu?

Martin Spirk spirk na kla.pvt.cz
Čtvrtek Červenec 26 13:14:52 CEST 2001


On Thu 26. July 2001 11:39, you wrote:
> Jiri Kratochvil wrote:
> > > (Dobra metoda je priradit ukazateli hned po zdestruovani objektu
> > > hodnotu 0, protoze delete s nulovym ukazetelem muzete v klidu volat a
> > > nic se
>
> Jo, tohle se tam pouziva, ale kdyz na ten objekt ukazujete z vice mist, tak
> se vam ten druhy ukazatel proste nevynuluje, kdyz vynulujete ten prvni. :-(

Rekl bych ze na tuhle chybu musi program vzdy chcipnout okamzite, takze se to 
da dobre poznat v debuggeru. Jinak ale pokud chcete videt odkud onen hrisny 
objekt pochazi, tak mam velice dobre zkusenosti s nastrojem ccmalloc 
(http://www.inf.ethz.ch/personal/biere/projects/ccmalloc/), dokaze krasne 
stromove zobrazit odkud ktery objekt pochazi (aspon u leaku na ktere jsem to 
pouzival). 
Dalsi nastroje na ktere mam odkazy, dosud tu nebyly zmineny ale zabyvaji se 
podobnymi vecmi:
dmalloc (http://dmalloc.com/) - pro C++ vypisuje pouze adresy, nikoli 
hierarchii volani
njamd (http://fscked.org/proj/njamd.shtml) - program jakoukoli chybu indikuje 
svym padem, takze pokud je nejaky problem v pouzitych knihovnach (coz je) tak 
se program ani nespusti
uds (http://frost.flewid.de/uds/index.html) - nezkousel jsem

Vyse popsane zkusenosti nejsou vysledkem nejakeho dusledneho zkoumani, naopak 
jenom jsem to zbezne vyzkousel.  Pote co jsem vyzkousel ccmalloc tak uz jsem 
ty ostatni moc nezkousel. 
Jinak spolecny problem vsech techto nastroju je, ze pri rozsahlejsim programu 
ktery vyuziva ruzne knihovny byva ten vypis pomerne dlouhy, takze v mem 
pripade to jeste obnaselo udelat si filtr ktery dokazal z vypisu vybrat jen 
nektere polozky.


			Martin



Další informace o konferenci Linux