Да, я так и сделал. Вопрос в том, как отладить приложение. Для этого надо знать, в каких случаях куча считается невалидной.
Мне вчера ночью удалось устранить ошибку . Сложилась именно та ситуация, о которой ты говоришь : запись по несуществующему элементу массива. Но вопрос остается открытым: каков полный список ситуаций, где куча некорректна?
Ну давай подумаем.
В куче есть блоки памяти и описатели блоков памяти (где какие, где свободное место и.т.д)
Блоки можно попортить только записав больше их размера (а как ещё?)
описатели блоков ИМХО в памяти ядра, туда фиг доберёшься.
Здравствуйте, adontz, Вы писали:
A>Здравствуйте, Seninandrew, Вы писали:
A>Ну давай подумаем. A>В куче есть блоки памяти и описатели блоков памяти (где какие, где свободное место и.т.д) A>Блоки можно попортить только записав больше их размера (а как ещё?) A>описатели блоков ИМХО в памяти ядра, туда фиг доберёшься.
Описатели блоков находятся в памяти пользователя. ::HeapCreate возвращает указатель на блок памяти, где находится administration header свежесозданной кучи.
Я попробую на неделе пройтись по куче с использованием ф-ии HeapWalk.
Мне интересно узнать, используется ли в стандартной реализации операторов new
и delete куча, возвращаемая GetProcessHeap. Если да, то почему при их
использовании проверка HeapValidate дает добро. Об интересных результатах напишу.