Teoretycznie mogę to powiedzieć
free(ptr);
free(ptr);
to uszkodzenie pamięci, ponieważ zwalniamy pamięć, która została już zwolniona.
Ale co gdyby
free(ptr);
ptr=NULL;
free(ptr);
Ponieważ system operacyjny będzie zachowywał się w nieokreślony sposób, nie mogę uzyskać faktycznej teoretycznej analizy tego, co się dzieje. Cokolwiek robię, czy to uszkodzenie pamięci, czy nie?
Czy zwolnienie wskaźnika NULL jest prawidłowe?
delete NULL
nie działa w C ++. delete można zastosować do wartości wskaźnika null określonego typu, ale nie do NULL
. delete (int*) NULL
jest legalne, ale nie delete NULL
.
ptr
wskazuje na pamięć, a ty jej nie wywołasz free
, to pamięć wycieknie. Ustawienie go NULL
tak, aby po prostu utraciło dostęp do pamięci i przecieki. Jeśli ptr
tak się stanieNULL
, wywołanie free
jest bez operacji.
free(ptr)
z ptr = NULL
. Nikt nic takiego nie powiedział.