Теоретически могу сказать, что
free(ptr);
free(ptr);
- это повреждение памяти, поскольку мы освобождаем уже освобожденную память.
А вдруг
free(ptr);
ptr=NULL;
free(ptr);
Поскольку ОС будет вести себя неопределенным образом, я не могу получить фактический теоретический анализ происходящего. Что бы я ни делал, это повреждение памяти или нет?
Действителен ли освобождение нулевого указателя?
delete NULL
недопустим в C ++. delete может применяться к значениям нулевого указателя конкретного типа, но не к NULL
. delete (int*) NULL
законно, но не delete NULL
.
ptr
указывает на память, а вы не обращаетесь к free
ней, память будет протекать. Установка этого значения NULL
просто теряет контроль над памятью и дает утечку. Если ptr
случаетсяNULL
, вызывающий free
не представляет никакой операции.
free(ptr)
на ptr = NULL
. Никто ничего подобного не сказал.