I have a Heap corruption crash for an application and so I turned on page heap from gflags and collected a crash dump file for that application.
From the dump file I found out that it is due to double freeing the memory.
Here is an example, From the call stack I found this
msvcr100!free(void * pBlock = "**Address**")
Then I did this
!heap -p -a <address>
address found in
_HEAP @
HEAP_ENTRY Size Prev Flags UserPtr UserSize - state
Address 000a 0000 [02] address 00003 - **(free )**
Trace: <1>
<2>
<3>
So we can see that it is trying to double free the memory and that resulted in crash. My question is can we see the call stack that changed or freed that memory before this operation? Is it possible?
I can see a trace below the !heap -p -a command is that the one that freed the memory? If it is so, I can see only some part of call stack, Is there any way I can see the total call stack or walk through the call stack manually to see which operation freed that block of memory.