Several people have said that these apps are crashing at an assert. How did asserts make it into production code? Is it just a C thing to make them debug-only?
"- but, it should never happen?!"
"- so, make it not happen, ever"
Asserts make the code blow up, which can make a problem easier to spot in dev/testing. In production it seems better to throw an exception, even if the program can't handle it well and just has to quit nicely.
I like your defensive programming strategy - see if the tires are flat before you get out on the highway.