Теоретически могу сказать, что
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. Никто ничего подобного не сказал.