Gå til innhold

detektere memoryleaks


Anbefalte innlegg

Heisann.

 

Sitter her og forsøker å detektere memoryleaks i visual studio. Det gjøres ved å inkludere følgende headere:

#define CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>

 

På slutten av programmet skal så denne funksjonen skrive ut memoryleaks:

_CrtDumpMemoryLeaks();

 

Bruker små objekter, så dette er jo veldig nytting for å oppdage memoryleaks når jeg programerer, ved at den skriver dem ut på slutten, og det fungerer jo forsåvidt fint, men her kommer twisten:

 

Jeg bruker openGL og glut...

Da overlater jeg jo kjøringen av programmet til glut ved:

 

glutMainLoop(  );

 

et kall etter denne vil jo være nyttesløst, ettersom dette kallet aldri returnere kontroll tilbake. Derfor gjør jeg kallet i destruktøren til klassen som driver programmet. Dette er det siste som kjøres i den delen av programmet jeg har kontroll over. Jeg får alikavel memoryleaks, selv om jeg har ryddet grundig opp etter meg. Det er jo forsåvidt naturlig, ettersom denne siste destruktører vel gjør noe opprydding av objekter i klassen hvis destruktører ikke kalles eksplisitt, og ettersom glut \ openGL ikke er avsluttet på dette tidspunket kan det jo ligge ting der også...

 

Så, etter denne laaange forklaringen kommer endelig spørsmålet:

 

er det noen som vet om en måte å hente ut informasjon om memoryleaks på et senere tidspunkt, eller evt hente det ut på andre måter ( har openGL noen egne slike kall ) ?

Lenke til kommentar
Videoannonse
Annonse

På Unix-plattformen har vi jo valgrind ... Fins vel noen gratis minnedebuggere til Windows også (Electric Fence?), dmalloc kan kanskje være til hjelp? Uansett, hvis jeg forstår deg rett styrer du minneallokering og deallokering manuelt. Hva med å bruke smarte pekere (std::auto_ptr f.eks), som frigjør minnet automatisk?

Lenke til kommentar

Programmerer objektoorientert, så når jeg oppretter objecter vha new må jeg huske på å slette alt jeg har oppretter hva new i destruktørene, så da styrer jeg minneallokering og deallokering manuelt ja.

F.eks har jeg i et av objektene et linket liste av pekere til andre objekter, og disse må jeg da slette eksplisitt ved delete i destruktøren.

 

Jeg tror jeg rydder skikkelig opp etter meg, men kan jo ikke være 100% om jeg ikke får skrevet ut på aller siste punkt i programmet mitt.

 

Takk for tipsenen A_N_K.

Bruker ikke noen spesielle windows kall (borsett fra de her minnedumpings greiene jeg har beskrevet her, men det er for debugging ), så programmet skal kunne kompileres og kjøres under linux også, så jeg får sjekke ut det her valgrind greiene du snakker om på en linux maskin...

Smarte pekere har jeg heller ikke vært borti. Får ta en titt på det også, men jeg tror neppe jeg gidder å skrive om programmet til å bruke slike istedet for dette prosjektet ihvertfall.

Lenke til kommentar

Smarte pekere er ekstremt simpelt, de kan for det meste brukes som vanlige pekere og initialiseres med objekter allokert med new. Forskjellen er at de kaller delete automatisk ved destruksjon.

 

Edit: Forresten, hvis du har en liste av new'ede pekere, bør du ikke bruke std::auto_ptr, den funker dårlig ved kopiering av objekter. Sjekk ut boost::shared_pointer (www.boost.org) eller Loki::SmartPtr (http://sourceforge.net/projects/loki-lib/).

Endret av A_N_K
Lenke til kommentar

Alt du trenger å gjøre er å sette noen flagg med _CrtSetDbgFlag. Du kjører kallet i starten av programmet ditt slik:

 

int main()
{
    _CrtSetDbgFlag ( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );

}

 

Da vil _CrtDumpMemoryLeaks automatisk bli kjørt når programmet avslutter.

 

Du kan lese mer om dette på MSDN.

 

Håper det var dette du var ute etter :)

Endret av kjetil7
Lenke til kommentar
Alt du trenger å gjøre er å sette noen flagg med _CrtSetDbgFlag. Du kjører kallet i starten av programmet ditt slik:

 

int main()
{
    _CrtSetDbgFlag ( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );

}

 

Da vil _CrtDumpMemoryLeaks automatisk bli kjørt når programmet avslutter.

 

Du kan lese mer om dette på MSDN.

 

Håper det var dette du var ute etter :)

Hehe, ja, var vel strengt tatt AKKURAT hva jeg var ute etter :D .

 

Takk skal du ha Kjetil7,

 

Edit: og skulle du sett... 3 objekter jeg glemmer å slette, dette må granskes :)

Endret av Herr_Dude
Lenke til kommentar

Vi lever vel i en bransje hvor det er vanlig å bruke fornorska engelske uttrykk?

 

I ordboka jeg har tilgjengelig står faktisk "detect" oversatt til "detektere". Det samme gjelder ikke overraskende andre veien.

 

Om det i såfall ikke er "lov" til å skrive "detektere" på norsk, er det bare flisespikkeri!

Endret av kjetil7
Lenke til kommentar
Vi lever vel i en bransje hvor det er vanlig å bruke fornorska engelske uttrykk?

 

I ordboka jeg har tilgjengelig står faktisk "detect" oversatt til "detektere". Det samme gjelder ikke overraskende andre veien.

 

Om det i såfall ikke er "lov" til å skrive "detektere" på norsk, er det bare flisespikkeri!

Det er forskjell på god og dårlig norsk :)

Lenke til kommentar
Det er forskjell på god og dårlig norsk :)

Sant nok, men skulle vi kommentert hvert innlegg med dårlig norsk her på forumet kunne det blitt ganske kaotisk...

 

Ser strengt tatt heller ikke argumentet med at "oppdage" er et bedre norsk ord enn "detektere" så lenge begge er lovlige. At det ene ordet er nyere og kommer fra engelsk er ikke noe argument etter mitt syn.

 

Personlig foretrekker jeg norske ord som er mest nærliggende de engelske på et fagforum for å unngå mest mulig misforståelser (selv om det i dette tilfellet ikke hadde vært noe problem med å bruke "oppdage" eller "finne").

 

Poenget er bare å gjøre seg forstått på en brukbar måte. Og det synes jeg trådstarteren gjorde meget bra! Så får heller språkgeeker diskutere hva som er bra eller dårlig språk et annet sted :)

Lenke til kommentar

Hehe, jeg hadde ikke tenkt å kommentere innlegget, men får vel gjøre det alikavel da siden det ble så mye om dette.

 

Jeg er fristet til å kalle innlegget både stupid og ignorant , men det ville være lavmål, og faktisk bokmål... ;)

Jeg bor for tiden i USA, og skal være den første til å inrømme at jeg oversetter ord til norsk fra engelsk over en lav sko, men når det gjelder deteksjon, detektor og, ja, detektere, er da virkelig det tekniske/fag termer både innefor data, fysikk og kjemi, og ikke rent sjeldent brukt i artikler av litt teknisk art. Skulle jeg skrevet en roman og ikke et innlegg i et forum om programering hadde jeg kanskje brukt et annet ord, men her inne kommer jeg til å forsette å bruke detektere på trass. :D

 

For å si det på godt norsk: Deal with it!

 

Edit: irriterer meg litt at du ikke pirker på memoryleaks/ minnelekasjer også... Når en først flisespikker kan man gjøre det med stil ihvertfall.

Endret av Herr_Dude
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...