Quote Originally Posted by brewbuck View Post
Smart pointers can't prevent out-of-bounds access, though. They can for the special case of NULL (throwing an exception instead of crashing), but how can they possibly know if some non-NULL pointer value is valid or not?
Not only that, they can't prevent logic errors such as a division by zero (found on of those, whoops), video memory leaks (guilty on that one too) or the wrath of a third-party program (e.g., API with a flaw in it, malicious code, hardware errors, etc.).

I've accept that as a flawed human, I write flawed code. Inevitably there are going to be bugs in any software that I write be it pointer errors, flawed logic, security holes, etc. One thing I've always hated is when a program has bugs that cause a crash and then requires me, the user, to report to the developer what happened.

In this way, I can have the program automatically report errors to me without the user having to get involved. They know that the problem was reported and can even get a report back stating that we've acknowledged a particular problem.

Regardless of how a crash is handled, the fact that it's handled looks a lot better than having the Operating System tell you that the program you were using blew up (e.g., the infamous "This program has performed an illegal operation").

I found a great program called BugTrap (referred by Codeplug) that does all of the things I wanted to do and many more. Going to strip it down as there are a lot of things that I really don't need but it's a great way to catch major exceptions and 'crash gracefully'.

Thanks for everybody's help!