A program futása közben ki hiba lép fel mi lehet a baja?
Ezek mutatótömbök:
Dinamikusan létrehozott objektumok címeit tárolják.
delete [] *Zoo;
delete [] *ZooTwo;
De ha kitörlöm a forráskódból ezt a két sort akkor nincs futásidejű hiba.
Miért?
Mert a programban nem "hiba", ha nem szabadítod fel a memóriát.
Amikor leáll úgyis felszabadul.
De tessék felszabadítani mindig mindent, mert nem jó dolog a memory leak és nem jó móka ha elfogy a memória.
Ja, bocsi kihagytam miért hiba.
Mert lehet nincs ott amit törölnél.
Mondjuk, de a kód több része nélkül nem lehet megmondani ezt.
Mutatótömbök, tehát ilyesmi:
Mammal** Zoo = new Mammal*[10];
?
Mert akkor ezzel nem a tömböt törlöd, hanem az első elemére hívod meg a delete[] operátort, ami hibás. Hiszen egy elemre a delete-t kell hívni. Ha törölni akarod, akkor
delete[] Zoo;
de ha ezt írom a forráskódba
delete [] Zoo; //undefined behavior
delete [] ZooTwo; //undefined behavior
plusz futásidejű hiba.
iostream ahogy a te példádban volt úgy csak a tömbökben tárolt dinamikus objektumok címét törlöm és nem az objektumot így még memórialeszivárgás is keletkezne ha a program futása nem érne véget mint az én példámban.
Ez így helyes:
Így tudom törölni az összes memóriacímen levő objektumokat:
delete [] *Zoo; //Első módszer.
delete [] Zoo[0] //Második módszer és ez ugyanaz mint az első.Ha jobban elgondolkozik rajta valaki rájön.
utána ha akarom a mutatótömbökben levő címeket felülírom a NULL al mert már nem mutatnak semmire vagy épp valami másra.
for(int i = 0;i < 3;i++) { Zoo[i] = NULL;ZooTwo[i] = NULL; }
Hopsz nincs futásidejű hiba csak így:
delete Zoo[0];
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!