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

Curenje memorije

[es] :: C/C++ programiranje :: Curenje memorije

[ Pregleda: 4259 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

boccio
Boris Krstović
Spoonlabs.com
nbgd

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

Sajt: bocc.io


+771 Profil

icon Curenje memorije20.09.2003. u 12:47 - pre 201 meseci
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...
Jeff, one day you’ll understand that it’s harder to be kind than clever.
 
Odgovor na temu

Dragi Tata
Malo ispod Kanade

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



+6 Profil

icon Re: Curenje memorije20.09.2003. u 16:02 - pre 201 meseci
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.
 
Odgovor na temu

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 - pre 201 meseci
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...
 
Odgovor na temu

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

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

Sajt: dejan.lekic.org


+2 Profil

icon Re: Curenje memorije20.09.2003. u 19:26 - pre 201 meseci
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
 
Odgovor na temu

Dragi Tata
Malo ispod Kanade

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



+6 Profil

icon Re: Curenje memorije20.09.2003. u 20:28 - pre 201 meseci
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

 
Odgovor na temu

[es] :: C/C++ programiranje :: Curenje memorije

[ Pregleda: 4259 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

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