Denne artikkelen vil diskutere hva en hukommelsestap er og gi en detaljert beskrivelse av hvordan du finner Minnelekkasjer I en C ++ -kode eller prosjekt.
Hva er en minnelekkasje
Et datamaskinproblem som kalles en hukommelsestap fører til at hukommelsen blir tildelt og frigjort feil. Når minnet i et program ikke lenger brukes av programmet, bør minnet frigjøres til operativsystemet, noe som gir effektiv bruk av alt tilgjengelig minne på et system. Men når et program ikke klarer å frigjøre det tildelte minnet og fortsetter å få tilgang til det etter at nytten er servert, Minnelekkasjer kan oppstå. Dette kan føre til at minnet blir konsumert eller 'lekket'Inntil systemet går tom for gratis minne og programmet krasjer. Siden alle systemer har en begrenset mengde minne og fordi minnet er dyrt, vil et programs minneutnyttelse øke hvis det inneholder Minnelekkasjer. Dermed vil det forårsake problemer.
Hvordan finne minnelekkasjer i en C ++ -kode eller prosjekt?
Det er noen grunnleggende måter du kan bruke til å oppdage minnelekkasjer i en C ++ -kode.
1: Sjekk for det grunnleggende om operatørene
Kjenn grunnleggende for operatører. Ny operatør tildeler et minneminne. Heapminnet frigjøres ved hjelp av slettoperatøren. For å frigjøre det samme minnet som ble tildelt, må du gjøre en sletting etter hver ny, ellers er det en sjanse for hukommelsestap.
2: Omfordel først etter sletting
Omfordel et minne først etter at du har slettet den første tildelingen. Hvis en variabel får en ny adresse for en annen tildeling, går den første adressen og bytene knyttet til den permanent tapt, noe som resulterer i hukommelsestap.
3: Sjekk for de tildelte pekerne
Observer de tildelte pekerne. Hver dynamiske variabel (minne tildelt på haugen) må være koblet til en peker. Det er vanskelig å slette en dynamisk variabel etter at den skiller seg fra pekeren (e). Nok en gang forårsaker dette en hukommelsestap.
4: Sjekk for de lokale pekerne
Bruk lokale pekere nøye. Når du definerer en peker i en funksjon, blir den dynamiske variabelen den peker på tildelt på haugen, ikke stabelen. Det vil forbli hvis du ikke fjerner det selv etter at programmet er ferdig med å forårsake Minnelekkasjer.
5: Bruk firkantede parenteser etter sletting nøye
Legg merke til de firkantede parentesene som følger "slett“. For å frigjøre et enkelt element, bruk slett av seg selv. For å frigjøre en heap -matrise, bruk slett [] vedlagt i firkantede parenteser.
Hvordan unngå minnelekkasjer?
Program for å unngå minnelekkasjer
For eksempel:
#inkludere
#inkludere
ved hjelp av navneområdet STD;
void func_to_handle_mem_leak ()
int* ptr = ny int (5);
cout<
int main ()
func_to_handle_mem_leak ();
retur 0;
De peker I ovennevnte program blir ikke slettet etter tildelingen. Dette forårsaker hukommelsestap I ovennevnte C ++ -kode.
#inkludere
#inkludere
ved hjelp av navneområdet STD;
void func_to_handle_mem_leak ()
int* ptr = ny int (5);
cout<slett (ptr);
int main ()
func_to_handle_mem_leak ();
retur 0;
I denne koden sletter vi pekeren i den brukerdefinerte funksjonen derfor hukommelsestap unngås.
Produksjon
Konklusjon
Minnelekkasjer Innenfor et program kan ha skadelige resultater om programmet er lite eller stort. Å løse Minnelekkasjer, Statiske analyseverktøy, diagnostiske verktøy og feilsøkingsverktøy er integrerte i å finne og fikse problemet. Som sådan skal C ++ kode eller prosjekter regelmessig undersøkes og analyseres for å oppdage noen Minnelekkasjer, Ved hjelp av verktøyene og teknikkene ovenfor kan du dempe minnelekkasjene i en C ++ -kode.