Chinaunix首页 | 论坛 | 博客
  • 博客访问: 573671
  • 博文数量: 493
  • 博客积分: 2891
  • 博客等级: 少校
  • 技术积分: 4960
  • 用 户 组: 普通用户
  • 注册时间: 2010-03-17 17:11
文章分类

全部博文(493)

文章存档

2010年(493)

分类:

2010-05-12 19:55:17

1 现象:问题描述
在某测试用例下,AIX机器下程序会异常退出,而Windows机器下不会。
2 关键过程:根本原因分析
在某测试用例下,引发程序Bug,对空指针进行操作。
但在Windows下,内存的异常访问可被try/catch捕获,而在Unix/Linux下不行。结果导致程序在Unix/Linux下与Windows下的表现不一致。
以下程序在Windows/HP Unix/AIX/Linux下测试,Windows下能打印出"error catched",其它操作系统下程序都会异常退出。
int main()
{
    char *p = 0;
    try{ *p = 1; }
    catch(...)
    {
        cout << "error catched." << endl;
    }
    return 0;
}
3 结论:解决方案及效果
将try/catch去掉,并排除导致空指针访问的Bug,问题解决。
4 经验总结:预防措施和规范建议
没有必要的try/catch不要使用,它会导致问题定位困难、不同操作系统下表现不一致等问题。
5 备注
NA
6 考核点
在Windows下,内存的异常访问可被try/catch捕获,而在Unix下不行。
7 试题
以下说法正确的是(A)
A. Windows下try/catch可以捕捉内存的异常访问;
B. HP Unix下try/catch可以捕捉内存的异常访问;
C. AIX Unix下try/catch可以捕捉内存的异常访问;
D. Linix下try/catch可以捕捉内存的异常访问;
阅读(682) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~