Uhh, IsBadReadPtr does not crash your program if the memory can't be read. It will return true if it's bad or false if not.
There's no "easy" way to know if memory can be read or not. The best way is simply to return a NULL pointer if something failed.
In C, I don't know of any way other than IsBadReadPtr to figure out if it's bad or not.
In C++, you could always use try/catch, but it's not a gaurantee.