Often crashes are caused by an Access Violation Exception.
This occurs when the program tries to access memory that is no longer valid, as in the following examples:
For each case we need to know the address that we are interested in querying.
•accessing memory that has been freed and released by the virtual memory manager
This memory address is the one we are interested in.
•accessing memory through a bad pointer held by an object that's since been deleted
The address of the object or data structure that held that pointer is the one we are interested in.
•calling a function on an object that has been deleted
The address of the object is the one we are interested in.
Note, this case won't crash if all the following are true:
othe function is not virtual
othe function accessed no data members of the object
othe function calls no functions on the object that are virtual
Knowing the address, we can use the analysis view and the Find Memory dialog to search for the allocation, reallocation and deallocation locations of the memory.
In the case of that memory then being re-used in an allocation for another object we can find that the analysis window and spot cases of code accessing one object when in reality it is accessing a completely different object in a re-used memory space.
The process is identical to the way we found objects using an address in the example of finding uninitialised memory.
A description of this is in the example of finding memory corruptions.