C++ radera en pekare (fritt minne)

C++ radera en pekare (fritt minne)

Beteendet för ditt program är odefinierat . Du kan bara använd delete på en pekare till minnet som du har allokerat med new . Om du hade skrivit

int* b = new int;
*b = 10;
int* c = b;

kan du skriv antingen delete b; eller delete c; för att frigöra ditt minne. Försök inte att frånvända antingen b eller c efter delete samtal men beteendet vid att göra det är också odefinierat .


Om b och c peka på samma minne och radering av någon av dem frigör minnet så att antagandet är korrekt. a att bli otillgänglig är dock inte korrekt i det här fallet eftersom du inte pekar på dynamiskt allokerat minne och du kan bara ringa delete /delete[] på något som skapades med new /new[] . Försöker delete /delete[] en pekare som inte tilldelades new /new[] är odefinierat beteende och kommer i allmänhet att sluta i ett segmenteringsfel.


Den förvirrande delen är att svaret på din fråga

Är ja, de är likvärdiga, och båda UB som nämnts överallt annars här.