Как блок управления памятью (MMU) обнаруживает двойное освобождение указателя?
MMU просто выполняет виртуальное адресное пространство -> отображение физической памяти, он ничего не знает о том, как организована куча / как работает распределение / ..., то есть работа операционной системы / распределителя.
Как ОС обнаруживает двойное освобождение? Какой механизм ??
Он просматривает список / растровое изображение / ... выделенных блоков, видит, что нет выделенного блока с адресом, который вы ему передали, поэтому он обнаруживает, что это двойное освобождение.
Однако, если этот блок уже был перераспределен, он находит его и правильно освобождает его => но теперь код, который использовал перераспределенный блок, сойдет с ума, так как память, которую он правильно получил и что он не ' Выпуск стал нераспределенным.
Если распределитель защищает нераспределенную память, помечая ее как недоступную для чтения и не записывающую / удаляющую ее с зафиксированных страниц виртуального адресного пространства, программа умрет, как только к этой памяти снова будет произведен доступ (но, очевидно, к коду причиной аварии будет фактически невиновность, так как она не сделала ничего плохого).
В противном случае приложение все еще может работать некоторое время, пока этот блок памяти не будет передан другому фрагменту кода, который запросил некоторое количество памяти. В этот момент два компонента одного и того же приложения будут пытаться работать с одним и тем же блоком памяти, со всей этой неразберихой.
(Спасибо Паскалю Куоку за указание на мою ошибку.)