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

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();
}
}
...全文
235 19 打赏 收藏 转发到动态 举报
写回复
用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
  • 打赏
  • 举报
回复
你要在项目-》属性选择异常类型
作为一名大三的学子,很有幸参加了第九届全国大学生“飞思卡尔杯”智能汽车竞赛。作为一个机械学子,在这个领域可谓是一张白纸,因为大二曾经自学过机电自动化方面的知识,这对整个制作起到了关键的作用。 全国大学生“飞思卡尔”杯智能汽车竞赛起源于韩国,是在飞思卡尔半导体公司资助下举办的大学生课外科技竞赛,按传感器类别分为摄像头组、光电组、电磁组、创意组。该竞赛是在规定的模型汽车平台上,使用飞思卡尔半导体公司的8位、16位微控制器作为核心控制模块,通过增加道路传感器、电机驱动电路以及编写相应的控制软件,制作一个能够自主识别道路的模型汽车,按照规定路线行进,以完成时间最短者为优胜。该竞赛涵盖自动控制、模式识别、传感技术、电子、电气、计算机、机械与汽车等多学科专业的创意性比赛。 我们组所参加的光电组,主要是以光电传感器或者线性CCD(现已禁止使用激光传感器)作为主要路径传感器,我们组选用的是飞思卡尔半导体公司的16位微处理器——RAM内核的K60系列,基于组委会指定的B车模平台而去制作智能车,B车模相对来说,车模采用舵机控制前轮转向,后轮使用滚珠差速器从而实现转弯差速。车模相对比较笨重,驱动电机的功率较大,转向半径较小,车模轮胎摩擦系数较小,这都严重制约了车速的提高。 B车模 有了车模,只是第一步。硬件设计工作的重任落在我肩上,基于上面车模因素,对我们组的硬件设计工作带来严重的考验,经过前期资料和历届技术报告的查阅,我们组最终定下了电路硬件的设计图纸。整个电路硬件设计是使用的Altium Designer软件,工程的原理图如下:( 采用分层设计思路设计原理图。)一、采用分层结构设计,使设计思路清晰,各电路模块关系明确。 顶层连线关系 二、电源部分设计 电源是一个系统工作稳定的基本保障,所以电源的设计工作对整个系统至关重要的。 经过查阅电子电路设计手册以及相关网上资料后,最终采用如下设计方案: 1.电源7.2V动力电池供电,瞬时电流能达到5A,满足驱动电机的驱动要求,但是对稳压电路带来了严重的影响。因为当电机电流过大,会造成电源大的压降,以至于稳压芯片不能正常工作,得不到想要的稳压电压,会导致微处理器自动复位,带来不可预料的危险。 2.经过查阅大量资料,最终确定采用底线性压差稳压的TPS7350、TPS7333 芯片分别得到5V、3.3V电压。5V主用给5V供电要求的芯片供电和测速编码器供电。3.3V主要给K60微处理器供电,虽然K60超频到100M时,相对普通微处理器功率高,由于采用TPS7333芯片稳压,输出功率也较高,所以满足微处理器正常工作要求。数字舵机的电源要求也相对较高,我们选用LM2941可调稳压芯片来作为舵机的电源,通过合理选择LM2941稳压电阻的阻值,就能得到5.5V的电压,可调稳压输出也方便后期的调试,因为在竞速的模型上,转向的灵活和快速,决定了车模的车速和稳定。所以常常为了加快舵机的响应速度,缩小舵机的响应时间,适当的加大舵机的供电电压。 3.为了满足驱动电机的快速加减速,因而IR2104芯片驱动大功率的MOSFET管—(相当于一个开关,电机电源还是7.2V,它的作用只是负责通过控制信号控制电机电源的接通和断开,已方便PWM电机调速),而IR2104的工作电压范围为10-20V,所以需要设计升压电路。升压电路采用MC34063芯片升压,因为MC34063匹配电容的电容值不容易选择,经过几次调试,从7.2V升14V电路总是不太稳定,最终我们采用舵机电源5.5V升14V,经测试,该升压电路能稳定工作并且满足IR2104供电要求。 4.再加上开关和电源指示灯就完成了电源原理图部分的设计工作了。 电源 三、控制器电路设计,车模的大脑,稳定性异常重要。 1.注意K60特殊功能的输出引脚,FTM实现PWM调速,LPTMR0_ALT2(输入捕捉)实现编码器测速,ADC实现CCD模拟电压的采集。 2.预留SPI、串口通信接口,方便调试。 3.PCB设计过程中,注意信号线的线宽和相邻信号线的间距,采用数字地和模拟地分开的原则,PCB两面都需要覆铜以减少信号干扰。 控制器四、 电机驱动电路作为整个系统的心脏,是提升速度的关键模块,因为模型车在运行过程中,需要频繁的加、减速。(对于直流电机,通过PWM调速大幅度增加电机电源的电压实现加速,通过PWM调速在电机上加一个适当的反向电压,从而实现电机的制动,完成减速过程,整个过程的PWM调速电压,都是通过软件算法——PID控制器来实现的,不能胡乱的加大电机电压,否则会出现电路板或者电机的损害,再进行减速制动的时候需要特别注意,减速制动产生大电流和大压降,对电路板和整个系统来说都是一个大的考验。)所以驱动电路的设计工作不能马虎,借鉴北京科技大学的驱动电路设计图纸,我们设

64,676

社区成员

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

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