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.