Я анализирую дамп, который показывает что-то странное: кажется, есть противоречие между командой !heap -x -v hexadecimal_address
и !heap -flt s size_of_block
Я спрашиваю о висящих указателях. В этом дампе этот висячий указатель оказался: 0x0bdd00c0
Чтобы получить информацию о блоке памяти кучи, я использую !heap -x -v 0bdd00c0
, который возвращает
Entry User Heap Segment Size PrevSize Unused Flags ----------------------------------------------------------------------------- 0bdd00b8 0bdd00c0 003b0000 0bc00000 98 20 8 busy
Что показывает именно то, что в этом случае:
- блок памяти в режиме
busy
(большую часть времени в других моих дампах память здесь свободна) - блок памяти имеет размер
0x98
байт - блок памяти управляется внутри кучи
003b0000
.
Что меня озадачивает:
Когда я запускаю !heap -flt s 98
(просто хочу наблюдать за другими объектами того же размера), я получаю этот результат, который не отображает указатель 0bdd00c0 моего исследования
HEAP_ENTRY Size Prev Flags UserPtr UserSize - state _HEAP @ 3b0000 14b24fa8 0014 0014 [01] 14b24fb0 00098 - (busy) 0bc645a8 0014 0014 [01] 0bc645b0 00098 - (busy) 0bc66398 0014 0014 [01] 0bc663a0 00098 - (busy) 0bcbedf8 0014 0014 [01] 0bcbee00 00098 - (busy) 0bce2cc8 0014 0014 [01] 0bce2cd0 00098 - (busy) 0bceff88 0014 0014 [00] 0bceff90 00098 - (free) 0bdf2f78 0014 0014 [01] 0bdf2f80 00098 - (busy) 0be28c50 0014 0014 [01] 0be28c58 00098 - (busy) 0be57470 0014 0014 [00] 0be57478 00098 - (free) 0beed050 0014 0014 [01] 0beed058 00098 - (busy) 0bf1aaf0 0014 0014 [00] 0bf1aaf8 00098 - (free) 0bf214c0 0014 0014 [00] 0bf214c8 00098 - (free) 0bf99bf0 0014 0014 [00] 0bf99bf8 00098 - (free)
(Я дал вам только отрывок, связанный с кучей 3b0000)
Так что я пришел к выводу, что, похоже, есть противоречие.
Я делаю/предполагаю что-то не так? Что я мог сделать, чтобы понять, что не так?