1.问题发现
有这样一段代码:
#include
int main()
{
int a, b, num1, num2, temp;
printf("please input two numbers:\n");
scanf("%d,%d", &num1, &num2);
if(num1 > 0 && num2 > 0)(1)
{
a = num1;
b = num2;
temp = a%b;
}
while(b != 0)(2)
{
a = b;
b = temp;
temp = a%b;
}
printf("gong yue shu : %d\n", a);
printf("gong bei shu : %d\n", num1*num2/a);
return 0;
}
该代码输入任何数字的执行结果(如图1)都是“浮点数异常(核心已转储)”,刚刚见到这个问题让人感觉摸不着头绪,程序根本没有用到浮点数,怎么会报告浮点数异常;
图1.程序运行结果
2.问题分析
下面我们通过Linux自带调试工具Gdb来进行调试,观察程序的运行状况。在编译的是个加上“-g”选项,方便利用Gdb调试。
图2.编译和调试指令
程序编译没有错误,下面使用Gdb工具调试;在不知道问题产生根源