For bounds checker, I really recommend using Visual Studio because it provides very nice debugging tools, including check for overruns, both on stack and heap.
Another good idea when something goes wrong is typically using Just-in-time (JIT), which can point you to a line of code that crashed a program. Visual Studio supports this.
Or you can attach a debugger to it and hope it crashes, at which time the debugger can catch the line it occured at.
Anyway, as people have pointed out already, you should fix the debug errors first and they are very likely the problem.
As for debugging "unknown" problems, the first thing you have to do if figure out what type of error you get. Very common errors are double-free, using deleted pointers, buffer overruns and clobbering memory. Good debuggers and tools spot many of these common problems.