在 Visual C++ 2010 下,以下代码片段隐藏了一个可疑行为:
CObject* myObjectPtr = CObjectFactory::MakeAnObject();
assert( myObjectPtr->CanDoSomeWork() ); // myObjectPtr can be null due to logical errors
下面的代码片段,当放在一个函数中时,当指针为 NULL 并且函数立即返回时,没有触发断言。除了额外的空指针检查任何人都可以建议的明显修复之外,是什么让代码以这种方式运行?即使错误发生在断言中,它通常不应该抱怨内存访问冲突错误吗?