Выделение области памяти с помощью free
не делает содержимое указателя NULL.Предположим, что у вас есть int *a = malloc (sizeof (int))
, а a
имеет 0xdeadbeef
, и вы выполняете free (a)
, затем после выполнения a
все еще содержит 0xdeadbeef
, но после вызова free
этот адрес памяти больше не зарезервирован для вас.Что-то вроде того, что вы сняли квартиру с malloc
, использованным в течение некоторого времени, вернули квартиру на free
, тогда у вас может быть дубликат ключа для квартиры, но он не зарезервирован для вас.
Выполнениеfree
в уже free
d памяти приведет к двойному повреждению свободной памяти.