Kezdőoldal » Számítástechnika » Programozás » (C++) Miért működik az alábbi...

(C++) Miért működik az alábbi program?

Figyelt kérdés

#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.



2017. ápr. 14. 10:28
 1/7 anonim ***** válasza:
77%
Nem törölted az rf_1-et, ahhoz delete[] kellene.
2017. ápr. 14. 10:48
Hasznos számodra ez a válasz?
 2/7 anonim ***** válasza:
100%

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.

2017. ápr. 14. 10:50
Hasznos számodra ez a válasz?
 3/7 A kérdező kommentje:
De ha minden igaz, akkor azt a memóriaterületet már felül lehetne írni. Szóval akkor csak az történt, hogy még hozzá tudtam férni, mert még nem lett felülírva?
2017. ápr. 14. 11:05
 4/7 anonim ***** válasza:
100%

Ú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.

2017. ápr. 14. 13:46
Hasznos számodra ez a válasz?
 5/7 A kérdező kommentje:
Köszönöm a válaszokat! :)
2017. ápr. 14. 14:21
 6/7 anonim ***** válasza:
Oh, most nézem csak, ez nem is tömb amit te megadtál, csak 10-el incializáltad az rf_1-et, akkor nem kell a [] delete-nél.
2017. ápr. 15. 12:28
Hasznos számodra ez a válasz?
 7/7 anonim válasza:
Ezt hívják undefined behavior-nek. Ilyen esetekre nem lehet megmondani mi fog történni. Kerüld.
2017. ápr. 17. 00:10
Hasznos számodra ez a válasz?

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

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!