社区
C++ 语言
帖子详情
try 除以0 问题
jamesjinyongming
2007-02-01 10:03:33
try
{
int a=0,b=0,c=0;
b=a/c;
}
catch(CExpection e)
{
}
为什么在debug状态下,不能扑获,直接谈出错误,而在release下不报错,也不扑获??
...全文
314
7
打赏
收藏
try 除以0 问题
try { int a=0,b=0,c=0; b=a/c; } catch(CExpection e) { } 为什么在debug状态下,不能扑获,直接谈出错误,而在release下不报错,也不扑获??
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
7 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
bruceteen
2007-02-02
打赏
举报
回复
为什么我只得了最低分,而且我是第一个给出正确答案的,而且还给出了解释。
分数不重要,我只是想知道理由。
天堂里的死神
2007-02-01
打赏
举报
回复
修正一下,前面回答错了,C++不包括除零。
BOOL SafeDiv(INT32 dividend, INT32 divisor, INT32 *pResult)
{
__try
{
*pResult = dividend / divisor;
}
__except (GetExceptionCode() == EXCEPTION_INT_DIVIDE_BY_ZERO ? EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH) {
return FALSE;
}
return TRUE;
}
MSDN上的原文……
bruceteen
2007-02-01
打赏
举报
回复
除零对C++而言是错误,而不是异常,所以应当使用操作系统的捕获异常功能
#include <iostream>
#include <windows.h>
int main()
{
__try
{
int zero=0;
std::cout << 1/zero << std::endl;
}
__except( GetExceptionCode()==EXCEPTION_INT_DIVIDE_BY_ZERO ? EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH )
{
std::cout << "EXCEPTION_INT_DIVIDE_BY_ZERO" << std::endl;
}
}
doubhor
2007-02-01
打赏
举报
回复
捕获的异常类型不对
todototry
2007-02-01
打赏
举报
回复
mark
天堂里的死神
2007-02-01
打赏
举报
回复
catch (CException) ???
除零应该是一个C++异常,不是一个MFC异常
#include<stdexcept>
……
catch (std::exception e)
试试?
taodm
2007-02-01
打赏
举报
回复
除0是触发硬件中断,要你启用编译器的选项把这个中断转换为异常才会有异常发生。而且,这个异常不一定是CExpection类型的,你只能用catch(...)
C++ 语言
64,637
社区成员
250,559
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章