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 NULLnie działa w C ++. delete można zastosować do wartości wskaźnika null określonego typu, ale nie do NULL. delete (int*) NULLjest legalne, ale nie delete NULL.
ptrwskazuje na pamięć, a ty jej nie wywołasz free, to pamięć wycieknie. Ustawienie go NULLtak, aby po prostu utraciło dostęp do pamięci i przecieki. Jeśli ptr tak się stanieNULL , wywołanie freejest bez operacji.
free(ptr)z ptr = NULL. Nikt nic takiego nie powiedział.