LINUX.ORG.RU

История изменений

Исправление annulen, (текущая версия) :

Напомню, что значение указателя после вызова free() является неопределённым согласно стандарту.

В стандарте ничего такого нет. Функция free() не может изменить значение указателя, так как он передается в нее по значению.

а значит единственное что можно сделать – занулить его

Нет. Ему можно присвоить другое значение, или просто не использовать. Занулять переменную, которая больше не будет использоваться - бессмысленная трата циклов.

Так вот, почему даже таких банальных вещей нет?

По тем же причинам, по которым в C нет «банальных» вещей вроже проверки выхода за пределы массива. Потому что в корректной программе таких ситуаций не возникнет, но подобные «защиты от дурака» будут замедлять ее работу.

Исходная версия annulen, :

Напомню, что значение указателя после вызова free() является неопределённым согласно стандарту.

В стандарте ничего такого нет. Функция free() не может изменить значение указателя, так как он передается в нее по значению.

а значит единственное что можно сделать – занулить его

Нет. Ему можно присвоить другое значение, или просто не использовать. Занулять переменную, которая больше не будет использоваться - бессмысленная трата циклов.

Так вот, почему даже таких банальных вещей нет?

По тем же причинам, по которым в C нет «банальных» вещей вроже проверки выхода за пределы массива. Потому что в корректной программе таких ситуаций не возникнет, но проверки будут замедлять ее работу.