The questions it can answer and problems it can solve include:
- How much memory am I using?
- Which parts of my code are allocating the most memory?
- Are there memory leaks - and where am I failing to deallocate?
- Is a pointer being used after it is deallocated .. or after it has been re-used - and crashing my program?
- For a given pointer, is it still valid, where was it allocated and how large is the block of memory?
- Is my program deallocating or freeing invalid pointers?
- Am I reading or writing beyond the end of an allocation and overwriting memory? If so, where?
Answering these questions solves many unexplained crashes. Ensuring code is clear from the types of issue listed also improves software quality.