(C++) Valaki el tudná nekem magyarázni, hogy miért NEM ad szegmentálási hibát az alábbi program?
#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.
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.
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
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!