Miért nem jó a dinamikusan foglalt memória felszabadítás ebben a C++ programban?
pastebin [dotcom] / tVGrVXhz
Írtam egy ilyen alap gyakorló programot, amiben létrehozok egy új 'asd' objektumot, abban lefoglalok dinamikusan egy int változónak helyet, és a main-ben bekért számot beállítom az objektum lefoglalt változójának, majd ezt kiírom.
Jól működik az egész, egészen addig, amíg nem akarom felszabadítani a program végén a lefoglalt INT változót.
Nem tudom hogy hogyan / hol kellene a free, mert bárhova írom a kódban, hibát kapok.
Tehát az osztályban dinamikusan lefoglalt int változót hol és hogy tudnám felszabadítani? :)
Próbáltam úgy is, hogy írtam egy új void felszabadit(){free(x);} függvényt az osztályhoz, és a main legvégén, a return előtt meghívom így: asd.felszabadit();
De így is hibát dob fordításkor a free(x); sorra... :(
C++-nak vannak saját operátorai a memória kezelésre (new, delete), de ajánlom inkább a smart pointerek használatát.
Egyébként pedig a memória foglalást a konstruktorban, a felszabadítást a destruktorban végezd és menni fog így is.
Az úgy nem lesz jó.
malloc-al: pastebin [dotcom] /X029eLnx
new-val: pastebin [dotcom] /J1ZBr4Vg
smart pointer: pastebin [dotcom] /azwKA7KA
Persze, a példádnak nem sok értelme van, hiszen mindig csak egyetlen intet tárolsz.
Kapcsolódó kérdések:
Minden jog fenntartva © 2025, 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!