linux程序 报浮点异常,关于Linux系统下错误“浮点数异常(核心已转储)”的分析...

本文详细分析了一段C++代码在Linux环境下出现“浮点数异常(核心已转储)”的问题。通过Gdb调试工具,发现在对0执行求余运算时引发错误。问题的根源在于非法的除零操作,这同样适用于除法运算。提醒程序员在编写代码时要留意逻辑,避免此类错误发生。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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)都是“浮点数异常(核心已转储)”,刚刚见到这个问题让人感觉摸不着头绪,程序根本没有用到浮点数,怎么会报告浮点数异常;

bdce4f6a92b4b080b30e9c38fdd664ca.png

图1.程序运行结果

2.问题分析

下面我们通过Linux自带调试工具Gdb来进行调试,观察程序的运行状况。在编译的是个加上“-g”选项,方便利用Gdb调试。

4e2aa1a5c73f855112a66d27c2c86959.png

图2.编译和调试指令

程序编译没有错误,下面使用Gdb工具调试;在不知道问题产生根源

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值