Начну издалека.
Скажем, устройство DCRT кучи известно. Есть структура _CrtMemBlockHeader, которая предшествует блоку, выделенному через new/malloc/calloc. Таким образом в отладчике легко проверить любой указатель на валидность (посмотреть на его заголовок и побегать по списку выделенных блоков).
Устройство релизной CRT кучи также можно изучить, благо CRT поставляется с исходными текстами.
А как устроены кучи Win32? Какие заголовки предшествуют блокам выделенной памяти? Это кому-нибудь известно? (У Рихтера ничего нет...)
А проблема такая. Приложение упало на RtlFreeHeap(). По дампу процесса установлено, что указатель передан в HeapFree() корректный. В смысле, что по нему находятся именно те данные, которые там и должны находиться. Нет сомнений, что указатель получен через HeapAlloc(). Интересно было бы проверить корректность заголовка этого указателя, либо как-то еще проверить его.
Буду очень благодарен за любую информацию по такой специфичной проблеме.