Hvordan feilsøke en minnelekkasje i C ++
En minnelekkasje er når et program fører til en trinnvis, men jevn forbruk av minne, slik at programmet til å bruke mer minne enn den trenger. I beste programmet vil bare bruke mer minne og tregere datamaskinen. Ekstreme tilfeller bruker nok minne til å forårsake andre programmer til å krasje på grunn av mangel på tilgjengelig minne, worst case scenario vil det krasje operativsystemet. I C ++ kan minne lekkasjer være forårsaket av flere forskjellige feil i kode. Følgende vil vise deg hvordan du sjekke for å se om programmet har en minnelekkasje og hvor du finner den.
Bruksanvisning
1 Finn ut om programmet har en minnelekkasje. Kjør programmet gjennom debugger ved å skrive:
'_CrtDumpMemoryLeaks ()'
Den første linjen med kode vil lese "Oppdaget minnelekkasjer!" Hvis ikke, så programmet ikke har en minnelekkasje.
2 Spore opp plasseringen av minnelekkasje. Den tredje linjen
'_CrtDumpMemoryLeaks ()'
brukes i utsagnet:
"#define _CRTDBG_MAP_ALLOC '
vil fortelle deg navnet på filen hvor lekket minne ble tildelt. Du kan også bruke MFC å spore minne bevilgninger. I MFC makroen:
'Debug_new'
kan brukes til å spore minne lekkasjer.
3 Gå til filen angitt. Den dårlige koding vil måtte bli plassert. Det er flere årsaker til en minnelekkasje; feil bruk av nye / slette en feilplassert slett, "mistet" pekere eller en peker går ut av omfanget. Sjekk linjer med kode der minne er tildelt og rette eventuelle problemer. Sjekk om tildelte minnet i en loop er utgitt i hver iterasjon. Sørg for at du pekere kan ikke gå ut av omfanget før minne slippes. Sjekk også at kodene:
'Malloc' / 'gratis'
"Nye" / "delete"
'Nye [] / slette []
brukes riktig.
4 Kjør programmet gjennom debugger igjen ved å skrive:
'_CrtDumpMemoryLeaks ()'
for å se om problemet vedvarer.