Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Curenje memorije

[es] :: C programiranje :: Curenje memorije

[ Pregleda: 1448 | Odgovora: 4 ]

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

boccio
Boris Krstović
Spoonlabs.com
nbgd

Član broj: 7594
Poruke: 2425
*.vdial.verat.net

Sajt: boccio.me


Profil

icon Curenje memorije20.09.2003. u 12:47

S obzirom da je ovo jedna od glavnih glavobolja svakog c++ programera, evo jedan mali snipet koda koji (mozda) moze biti od pomoci u detekciji istoga. Ako neko ima slicne primere ili savete za otklanjanje, ne bi bilo lose da ih ovde okupimo...

Code:

#include "crtdbg.h"

class FindMemoryLeaks
{
_CrtMemState m_checkpoint;

public:

FindMemoryLeaks()
{
_CrtMemCheckpoint(&m_checkpoint);
};

~FindMemoryLeaks()
{
_CrtMemState checkpoint;
_CrtMemCheckpoint(&checkpoint);
_CrtMemState diff;
_CrtMemDifference(&diff, &m_checkpoint, &checkpoint);
_CrtMemDumpStatistics(&diff);
_CrtMemDumpAllObjectsSince(&diff);
};
};


deklarisite nesto tipa FindMemoryLeaks leaks; u glavnom cpp fajlu i pustite debug run, nakon cega ce debug window sadrzati informacije o (eventualnim) curenjima...
20.09.2003. u 12:47 

Dragi Tata

Član broj: 1958
Poruke: 3899
..g-c5300-3.dialup.nethere.net

Sajt: www.novetehnologije.com


Profil

icon Re: Curenje memorije20.09.2003. u 16:02
Curenje memorije je u praksi jako naduvan problem. Čak i relativni početnik može lako da ih izbegne ako je iole disciplinovan, a posebno ako koristi std::vector umesto dinamičkih nizova i "pametne pointere" umesto "sirovih".

Doduše tačno je da ih je ponekad teško naći ako se već pojave.
20.09.2003. u 16:02 

sspasic
Sasa Spasic

Član broj: 3261
Poruke: 175
*.medianis.net

Jabber: sspasic@elitesecurity.org
ICQ: 35454521


Profil

icon Re: Curenje memorije20.09.2003. u 19:14
Citat:
Dragi Tata:
Doduše tačno je da ih je ponekad teško naći ako se već pojave.


A ako se pojave:
http://www.codeproject.com/tools/leakfinder.asp

Prilicno upotrebljiva stvar.

Inace, Boehm GC (vec spominjan ovde) takodje moze da se koristi za detekciju curenja memorije, ali ako koristite MS VC++ leakfinder ume da bude bas od pomoci.

Iskreno, meni se vise puta desavalo da imam ovaj problem, ali obicno ne u kodu koji sam sam pisao, posto se tu trudim da maksimalno koristim one boost::smart_ptr ili std::auto_ptr, ali u third party bibliotekama koje su pisane u C-u i koje ponekad zbog slabe dokumentacije ne koristim na pravi nacin...
20.09.2003. u 19:14 

leka
Dejan Lekić
senior software engineer, 3Developers Ltd.
London, UK

Član broj: 234
Poruke: 2530
*.telia.com

Sajt: dejan.lekic.org


Profil

icon Re: Curenje memorije20.09.2003. u 19:26
Za detekcije curenja memorije treba koristiti programe koji su specijalizovani za to - Valgrind, Checked, Code Guard (i slicno)... Naravno, mogu da se koriste i neke implementacije garbage collector-a kao sto rece sspasic...
Dejan Lekic
software engineer, MySQL/PgSQL DBA, sysadmin
20.09.2003. u 19:26 

Dragi Tata

Član broj: 1958
Poruke: 3899
..ndg-pm4-2.dialup.nethere.net

Sajt: www.novetehnologije.com


Profil

icon Re: Curenje memorije20.09.2003. u 20:28
Citat:
sspasic:
one boost::smart_ptr ili std::auto_ptr


Ovo je siguran sam lapsus, ali za one koji ne znaju, nije boost::smart_ptr, već boos::shared_ptr ili boost::scoped_ptr. Oba su odlična, ali moj favorit je Loki::SmartPtr. Što se tiče std::auto_ptr, bolje je uopšte da se ne koristi ako ne znate tačno šta radite. Više o njemu:

http://www.gotw.ca/publications/using_auto_ptr_effectively.htm

20.09.2003. u 20:28 

[es] :: C programiranje :: Curenje memorije

[ Pregleda: 1448 | Odgovora: 4 ]

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.