Visual C++ 2010 では、次のスニペットが疑わしい動作を隠しています。
CObject* myObjectPtr = CObjectFactory::MakeAnObject();
assert( myObjectPtr->CanDoSomeWork() ); // myObjectPtr can be null due to logical errors
次のスニペットを関数に配置すると、ポインターが NULL で関数がすぐに返されたときにアサートがトリガーされませんでした。追加のヌル ポインター チェックの明らかな修正を別として、誰でも提案できることですが、コードがそのような動作をした原因は何ですか? アサート内でエラーが発生したとしても、通常はメモリアクセス違反エラーについて文句を言うべきではありませんか?