Very general: Is there an easy way to tell which line of code last freed a block of memory when an access violation occurs?
Less general:
Short answer: no.
What you need is a debug malloc. I don't keep up with Windows any longer but there are several about, including this free one.
Looks like Visual Studio C has a built in version. See here
When the application is linked with a debug version of the C run-time libraries, malloc resolves to
_malloc_dbg
. For more information about how the heap is managed during the debugging process, see The CRT Debug Heap.
... and see here for _malloc_dbg.
No, not unless you provide your own allocators (e.g. by overloading new/delete) to store this information.
What profilers do is highly dependent on what they're profiling. I'm not aware of any profiler that tracks what you're looking for.
Perhaps if you provided more details on your situation people could suggest an alternative means of diagnosing the problem you're encountering.
Yes!
Install the Windows Debugging Tools and use Application Verifier.
Now when you make the crash happen, you will get additional information in the debugger from AppVerifier. Use !avrf (may take a long time to run (minutes)) and it will try to give you as much useful information as possible.
You can all use the dps command on the memory address to get all the stored stack info (allocation, deallocation, etc).
You can also use the !heap command on the memory address:
0:004> !heap -p -a 0x0C46CFE0
Which will dump information as well.
Further Reading: