Kezdőoldal » Számítástechnika » Programozás » (C++) Valaki el tudná nekem...

(C++) Valaki el tudná nekem magyarázni, hogy miért NEM ad szegmentálási hibát az alábbi program?

Figyelt kérdés

#include <iostream>


using namespace std;


int main()

{

int *p = new int;

*p = 3;

delete p;


*p = 8;

cout << *p;

}


Wikipédián az alábbit olvastam, ebből gondoltam hogy itt segfaultot kéne hogy kapjak:

Generally, segmentation faults occur because....or because it points to memory that has been freed/deallocated/"deleted".

Vagy valamit elnéztem volna? Még eléggé kezdő vagyok a pointereket tekintve.



2012. okt. 29. 18:41
 1/2 iostream ***** válasza:
100%

Ezt úgy hívják, hogy undefined behavior. Vagy hibát okoz, vagy nem. Persze mindig úgy lesz, hogy tesztelés közben nem, aztán ha ügyfél használja, akkor már igen.


Ugyanis a delete az nem szünteti meg azt a memóriaterületet, csak meghívja a destruktort, ha van, és "felszabadítja" a területet, bármit is jelentsen ez. Általában a program nem fog minden intnyi memóriaterülettel az oprendszerhez szaladni, hogy tessék itt van, visszaadom, hanem van neki egy lefoglalt N méretű memóriaterülete, és azzal gazdálkodik. Azaz az oprendszernek nem fog feltűnni, hogy te érvénytelen memóriaterületre írsz (ezt jelentené a segfault), hiszen az ő szemszögéből az a memória a programodhoz tartozik.

Akkor vannak érdekesebb esetek, amikor egy komplex objektumot szabadítasz fel, amiben vannak mutatók más objektumokra, na akkor könnyen elmehet segfault irányba.

2012. okt. 29. 18:51
Hasznos számodra ez a válasz?
 2/2 A kérdező kommentje:
Köszönöm szépen!
2012. okt. 29. 18:59

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!