调试程序时,弹出如下提示:
看调用堆栈,没发现什么有用的信息:
修改VS设置(Debug -> Exceptions -> Win32 Exceptions ,将这些异常都抛出),重新运行程序。
VS能给了出更明确的提示:访问冲突,并定位到了冲突的代码。
所谓访问冲突,就是访问了不该(不能)访问的内存位置。
查看调用堆栈前后执行的代码,发现是一处宏书写错误了:
#define APPINSTANCE ((CXXXApp*)AfxGetApp)
意思是把函数指针AfxGetApp转换成CXXXApp*指针
正确的写法是:
#define APPINSTANCE ((CXXXApp*)AfxGetApp())
把函数AfxGetApp()的返回值CWinApp*指针转换成CXXXApp*指针
总结:
1,对于莫名其秒的崩溃,可以修改VS设置,将所有异常抛出,能更方便定位出错代码
2,C风格的强制类型转换,是有风险的,需要人为保证结果。如果使用dynamic_cast操作符,编译时就会报错。