(C++) Miért működik az alábbi program?
#include <iostream>
using namespace std;
int main()
{
int* rf_1 = new int(10);
int* rf_2 = rf_1;
delete rf_1;
cout<<rf_2<<endl<<rf_1<<endl;
cout<<*rf_2<<endl<<*rf_1;
return 0;
}
Szóval adott ez a program. Igazából az érdekelt, amikor megírtam, hogy az 'rf_2' pointer továbbra is elérhető marad, miután a 'rf_1' pointert töröltem. Azt hittem segfault lesz, de végül nem. Ráadásul a 'rf_1' pointer is elérhető, amit kitöröltem (a mutatott értékeik is megmaradnak). Ez miért van így? A válaszokat előre köszönöm.
Mert ez C++.
Az adott memóriaterülettel nem történik az égvilágon semmi (mert ha történne az nem lenne hatékony), hanem csak jelzed az oprendszernek, hogy azt a memóriaterületet már nem használod, később ha szükség lesz a helyre felhasználhatja.
Úgy van, ahogy mondod, nem törlődik, csak felszabadul. Ugyanúgy, ha létrehozol egy memóriacímet, és lekéred, memóriaszemetet találsz benne.
Az is igaz, ha tömböt akarsz törölni, akkor kell a [], mert így gyakorlatilag 1 intnyi területet szabadítottál fel, és te 10 intnyi területet foglaltál le.
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!