LINUX.ORG.RU

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

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

при delete, в данное место памяти будут прописаны - указатель на следующий свободный блок, размер блока, и «магическое слово»(но это зависит от философии менеджера кучи).

итак кусок стека вам занесли в список свободных блоков менеджера кучи, расписав стек за данным обектом служебной инфой. поскольку у вас размер обьекта в размер int, а писать менеджер кучи будет 2-3 инта туда, то вам распишут область за обьектом. проверьте это сами, сделав там перемиенную.

потом туда записали 11, и поломали этот список свободных блоков совсем. теперь чтобы проверить, что куча сломана, надо просто попросить у кучи 1 байт, через malloc какой-нить. впрочем менеджер может вам и отдать этот блок, если просто берет из списка свободных блоков - первый подходящий. вообще менеджеры устроены не совсем уж так просто, обчно они хранят свободные блоки разных размеров в разных списках, чтобы искать быстрее первый подходящий, например.

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

при delete, в данное место памяти будут прописаны - указатель на следующий свободный блок, размер блока, и «магическое слово»(но это зависит от философии менеджера кучи).

итак кусок стека вам занесли в список свободных блоков менеджера кучи, расписав стек за данным обектом служебной инфой. поскольку у вас размер обьекта в размер int, а писать менеджер кучи будет 2-3 инта туда, то вам распишут область за обьектом. проверьте это сами, сделав там перемиенную.

потом туда записали 11, и поломали этот список свободных блоков совсем. теперь чтобы проверить, что куча сломана, надо просто попросить у кучи 1 байт, через malloc какой-нить. впрочем менеджер может вам и отдать этот блок, если просто берет из списка свободных блоков - первый подходящий. вообще менеджеры устроены не совсем уж так просто, обчно они хранят свободные блоки разных размеров в разных списках, чтобы искать быстрее первый подходящий, напримерю