急!在线等!异常捕捉不到

Lonelywolf1899 2010-07-09 03:54:16
代码如下,程序直接崩溃,不能进入catch 部分。


#include <iostream>

using namespace std;

int main()
{
try
{
int a, b, c;
a=1; b=0; c=a/b;

return 0;
}
catch(std::exception e)
{
cout<<e.what();
}
}
...全文
239 19 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
饿半肚 2012-12-24
  • 打赏
  • 举报
回复
试了,是可以的。我的环境是VC2008,在3楼说的配置项里面选择“是,但有 SEH 异常(/EHa)”就能捕获了。
机智的呆呆 2010-07-09
  • 打赏
  • 举报
回复

#include <stdio.h>
#include <windows.h>
#include <eh.h>
#include <iostream>
using namespace std;

class SEH_Exception:public exception
{
private:
unsigned int nSE;
public:
const char *what() const
{
return "divide by 0!";
}
};
void trans_func( unsigned int u, EXCEPTION_POINTERS* pExp )
{
cout<<"Handles Win32 exceptions (C structured exceptions) as C++ typed exceptions....."<<endl;
throw SEH_Exception();
}
int main()
{
try
{
_set_se_translator( trans_func );
int a, b, c;
a=1; b=0; c=a/b;
return 0;
}
catch(exception& e)
{
cout<<e.what()<<endl;
}
}

需要开始/EHa编译选项
guangdongmutou 2010-07-09
  • 打赏
  • 举报
回复
每天回贴有分拿。
帮顶
Lonelywolf1899 2010-07-09
  • 打赏
  • 举报
回复
我试了,不行啊。你是什么环境?

[Quote=引用 14 楼 zhangweiit 的回复:]

我试了,这样可以
C/C++ code


#include <iostream>
#include <stdio.h>
using namespace std;

int main()
{
try
{
int a, b, c;
a=1; b=0; c=a/b;

return 0;
}
catch(...)
……
[/Quote]
  • 打赏
  • 举报
回复
这个不应该捕获的
zhangweiit 2010-07-09
  • 打赏
  • 举报
回复
我试了,这样可以


#include <iostream>
#include <stdio.h>
using namespace std;

int main()
{
try
{
int a, b, c;
a=1; b=0; c=a/b;

return 0;
}
catch(...)
{
cout<<"exception thrown";
}
getchar();
return 0;
}

selooloo 2010-07-09
  • 打赏
  • 举报
回复
catch并没强大到所有异常都可以捕捉的,有些异常需要编译器的支持
而且你try里没throw啊,
改成这样 c=(float)a/b;可以避免崩溃,再自己写个异常类就可以了
pengzhixi 2010-07-09
  • 打赏
  • 举报
回复
请用vc的SEH异常处理机制
Lonelywolf1899 2010-07-09
  • 打赏
  • 举报
回复
Linux 下 G++ 也不行啊。。。。。。

Lonelywolf1899 2010-07-09
  • 打赏
  • 举报
回复
我是用的 VS2008 建立的 空的控制台程序。

konta 2010-07-09
  • 打赏
  • 举报
回复
0xC0000094: Integer division by zero.
Lonelywolf1899 2010-07-09
  • 打赏
  • 举报
回复
这个我试过了,不行啊


[Quote=引用 3 楼 zhangweiit 的回复:]

项目-》属性 -》C|C++ -》代码生成-》启用C++异常-》,选择/EHa
[/Quote]
zhangweiit 2010-07-09
  • 打赏
  • 举报
回复
#include <iostream>

using namespace std;

int main()
{
try
{
int a, b, c;
a=1; b=0; c=a/b;

return 0;
}
catch(...)
{
cout<<"xxx";
}
}

这个试试看
pengzhixi 2010-07-09
  • 打赏
  • 举报
回复
#include <windows.h> 
#include <iostream>
using namespace std;

int main()
{

__try
{
int i=0;
i /= i;
}
__except(EXCEPTION_EXECUTE_HANDLER)
{
cout < < "除数为0 " < <endl;
}
}
pengzhixi 2010-07-09
  • 打赏
  • 举报
回复
除数为0的异常得用VC的SEH来捕捉。
djjlove_2008 2010-07-09
  • 打赏
  • 举报
回复
这段程序在我的DEV-C++中有异常的,为什么我的编译能捕捉到了,相信只是你的编译器问题,自己设置下,或者建议你换一个编译器:DEV-C++,内核是LINUX的GNU,很好用,又接近最新C++标准。
zhangweiit 2010-07-09
  • 打赏
  • 举报
回复
项目-》属性 -》C|C++ -》代码生成-》启用C++异常-》,选择/EHa
ztenv 版主 2010-07-09
  • 打赏
  • 举报
回复
除0是个错误,在C++中不是异常,所以捕获不到;另外,据说好的C++程序是不会用try...catch的;
zhangweiit 2010-07-09
  • 打赏
  • 举报
回复
你要在项目-》属性选择异常类型

65,187

社区成员

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

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