clq
浏览(0) +
2005-06-11 12:05:28 发表
编辑
关键字:
1.让VC程序能捕获除零错等异常
在C++中,除零错与访问空指针的错误是不能用try...语句捕获的。这导致了程序员必须检测每一个变量与它们的范围,否则程序会立即崩溃。有人说这是好事,但实际情况则是不可能做到如此细致。这实在是C++的缺陷,在delphi、java等更现代一些是语言是不会这样的。delphi即使在没有try的情况下也只会退出本函数,而不是退出整个程序。那么就没办法了吗。当然有,至少VC中有一个功能能完成这种捕获:采用异步异常模型。这样就能捕获非法内存访问、除零等结构化异常。使用的方法很简单,就是在编译选项时加上/EHa的编译参数。对于VC6是在project->setting->c/c++->project options框中增加。如图所示。
那么对于另外一个著名的编译器GCC呢?有什么办法完成这一功能?我看过一篇在linux下自定义出错处理函数的文章,但是在windows平台的GCC中,我没有得到预期的效果,也许还要再寻找别的方法。
附,会引起崩溃的代码:
/*对于release版本,如果你运行,你会发现程序不能捕获非法内存访问、除零等结构化异常,这是因为VC在release版默认是同步异常,不捕获结构化异常,只能捕获C++的异常,所以你需要修改编译选项,采用异步异常模型,在project->setting->c/c++->project options框中增加/EHa的编译选项。*/
try
{
int i1 = 0;
int i2 = 100/i1;
}catch(...){}
try{
printf(NULL, 1);
}catch(...){}
前些天,我还碰到了用strstr()函数都会崩溃的“笑话”(原因还是空字符串指针)。
后记:对于我来说找到这个方法非常重要。因为象IE这样经常崩溃的程序是令人厌恶的(当然opera、firefox崩溃的时候并不比IE少),虽然C++程序员可能觉得是天经地义的,但用户可不会这样认为。
clq
[图片]
...
NEWBT官方QQ群1: 276678893
可求档连环画,漫画;询问文本处理大师等软件使用技巧;求档softhub软件下载及使用技巧.
但不可"开车",严禁国家敏感话题,不可求档涉及版权的文档软件.
验证问题说明申请入群原因即可.