Kezdőoldal » Számítástechnika » Programozás » Miért nem jó a dinamikusan...

Miért nem jó a dinamikusan foglalt memória felszabadítás ebben a C++ programban?

Figyelt kérdés

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? :)


2015. nov. 21. 12:24
 1/7 A kérdező kommentje:

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... :(

2015. nov. 21. 12:37
 2/7 anonim ***** válasza:

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.

2015. nov. 21. 12:54
Hasznos számodra ez a válasz?
 3/7 A kérdező kommentje:
Konstruktorban már ma memória foglalás se működik, mivel azoknál a függvényeknél már elszáll a fordító, ahol hivatkozok a konstruktorban lefoglalt változókra... :D
2015. nov. 21. 13:10
 4/7 A kérdező kommentje:
Konstruktorban nem működik a new-val a memória foglalás, de a destruktoros törlés már megy a delete[]-el, ez így már jó lesz, köszi! :)
2015. nov. 21. 13:19
 5/7 anonim ***** válasza:

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.

2015. nov. 21. 14:12
Hasznos számodra ez a válasz?
 6/7 anonim ***** válasza:
shared ptr helyett elment volna a unique ptr
2015. nov. 21. 15:18
Hasznos számodra ez a válasz?
 7/7 anonim ***** válasza:
Illetve minden példánál kétszer kap értéket az x változó, hacsak nem bűvészkedik a fordító.
2015. nov. 21. 15:20
Hasznos számodra ez a válasz?

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

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!