Chinaunix首页 | 论坛 | 博客
  • 博客访问: 444607
  • 博文数量: 72
  • 博客积分: 3186
  • 博客等级: 中校
  • 技术积分: 1039
  • 用 户 组: 普通用户
  • 注册时间: 2009-03-07 16:53
文章分类

全部博文(72)

文章存档

2012年(1)

2011年(5)

2010年(10)

2009年(56)

我的朋友

分类: C/C++

2009-07-29 18:32:50

最近调试一处程序,花了好几天。症状是程序总是莫名其秒的退出。
后来发现进程退出,返回到了其父进程中。

程序调试环境非常的差,改一下程序就要重新写入flash,还要把信息打印到屏上看程序状态。

慢慢的缩小范围,把错误定格在了一个线程里,原以为是线程的处理有问题,害的浪费了好多时间。最后发现线程里面有一句除法运算,针对这句屏蔽一下,果然不出错了。

C里除数为0时,程序是会出现异常的,而在Linux下,是不会对这种异常做修复性处理,而是直接的退出当前进程。

写些测试函数

#include <stdio.h>

#define EXIT_SUCCESS 0

int
main (int argc, char *argv[])
{
    int a, b, c;

    a = 5;
    b = 0;
    c = a / b;

    printf("%d\n", a);
    printf("%d\n", b);
    printf("%d\n", c);
    return EXIT_SUCCESS;
}   

-------------------------------------程序输出结果:

浮点数例外
上面的程序在c = a / b;这一句就退出了,没能输出后面的语句。


#include <stdio.h>

#define EXIT_SUCCESS 0

int
main (int argc, char *argv[])
{
    float a, b, c;

    a = 5.0;
    b = 0.0;
    c = a / b;

    printf("%f\n", a);
    printf("%f\n", b);
    printf("%f\n", c);
    return EXIT_SUCCESS;
}   

---------------------------------------输出结果:

5.000000
0.000000
inf

当除数为符点数时,即使其为0,程序也不会报错。inf可能表达无穷大之类的意思。现在还不敢确定。



阅读(2130) | 评论(0) | 转发(0) |
0

上一篇:数学计算

下一篇:数组访问越界

给主人留下些什么吧!~~