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 打赏 收藏 转发到动态 举报
写回复
用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(...)

64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧