Dzień dobry wszystkim!
Niedawno w pewnej dyskusji wyniknął temat "usuwania usuniętych wskaźników." Chodzi o to, że następujący kod nie powoduje protestów ze strony kompilatora:
int* a = new int();
delete a;
delete a;
Zastanawiamy się w jaki sposób w pamięci zaimplementowany jest wskaźnik i co faktycznie robi metoda delete. Mam swoją teorię - że jest to po prostu fragment pamięci (odpowiednia liczba bajtów) w którym zapisujemy adres na który wskaźnik ma wskazywać a delete ten obszar zwalnia i pozwala go nadpisać inną zmienną. Jeśli jednak mam rację, to taki kod jest bardzo niebezpieczny - może spowodować usunięcie zmiennej, której wcale usuwać nie zamierzamy (jeśli pomiędzy jednym delete a drugim coś tam zostało zapisane). Obstawiałabym zatem, że niezgłoszenie przez kompilator choćby ostrzeżenia jest błędem. Czy ktoś mi może opowiedzieć mniej więcej jak to rzeczywiście działa, na ile mam rację i dlaczego jest jak jest? Będę wdzięczna :)