一处“未处理的异常”解决方法

调试程序时,弹出如下提示:



看调用堆栈,没发现什么有用的信息:
 


修改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操作符,编译时就会报错。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值