Если вы правильно распределяете / освобождаете / обращаетесь к памяти, вы никогда этого не увидите.Вы столкнетесь с этим только тогда, когда сделаете что-то не так.
Как правило, malloc реализуется с помощью диспетчера перераспределения памяти.Если вы спросите malloc о 4 байтах памяти кучи, скажем, тогда менеджер памяти во время выполнения C выделит больший блок и затем выделит вам 4 байта в этом блоке.Последующие запросы на небольшие объемы памяти будут затем перераспределяться из одного из этих больших блоков.
Вы можете считывать и записывать в области этих больших блоков памяти, которые еще не были перераспределены malloc.Это, конечно, неопределенное поведение.Пожалуйста, не делай этого!Вы также можете читать и записывать в освобожденные субблоки, если больший блок не был возвращен в систему.Опять же, пожалуйста, не делайте этого.
Чаще всего программа выдает ошибку с нечитаемой ошибкой памяти (также известной как ошибка сегментации или нарушение доступа), когда она пытается получить доступ к освобожденному адресу и блокировкепамяти, содержащей этот адрес, был возвращен в систему.Это известно как устаревший указатель.