浮点异常(核心转储)#694457
Floating point exception (core dumped) #694457
我不太了解C++,我不明白为什么,但发生了此错误: 浮点异常(核心转储(
我不知道我该如何解决它。
#include <iostream>
using namespace std;
int main() {
int a = 251;
int b = 0;
while (a > 0) {
a = a / 10;
b++;
}
int c = 2;
int d = 1;
while (c <= b) {
d = d * 10;
c++;
}
cout << d;
int answer = 0;
int f = d;
int g = 1;
float help;
while (b > 0) {
help = (a / (d * g)) *(d / f);
answer = answer + (int)help;
a = a % (d * g);
g = g * (1 / 10);
f = f * (1 / 10);
b--;
}
cout << answer;
return 0;
}
与直觉相反,"浮点异常"是当您尝试执行整数除以零时,CPU 和/或操作系统会跳出的异常。
C++使此操作未定义;您的计算机完全禁止此操作。
使用调试器单步执行程序时检查所有变量,并记住1 / 10
是零,而不是 0.1,因为它是整数除法。(此错误会传播到循环的下一次迭代,您尝试将此零值用作除数。
将浮点数除以零定义更明确,ISTR 它将踢出特殊值inf。
每当"核心转储"时,都可以使用 GDB 来调查崩溃:gdb binary core
.以下是代码中发生的情况:
Program terminated with signal SIGFPE, Arithmetic exception.
#0 (...)
at (...):LINE_NUM
LINE_NUM help = (a /(d * g)) *(d /f);
在第二次迭代期间,您的f
和g
已经等于 0。在 Linux 中,您可以捕获SIGFPE
信号并处理错误,也可以在执行除法之前检查代码中的变量。
正如这里回答的那样
更好地使用:
g = g/10;
f = f/10;
对于整数值。 还要在除法前检查g和f是否不等于零。
我希望这对;)有所帮助
相关文章:
- 分段故障(堆芯转储)矢量
- Cppcheck生成xml转储文件
- 如何找出GDB的SIGTRAP核心转储的根本原因
- C++映射分割错误(核心转储)
- 在c++中初始化矩阵时出现分段错误(核心转储)
- 在c++中键入向量中的所有值后,得到分段错误(核心转储)
- 浮点异常(核心转储)#694457
- 分段错误(核心转储)但无法弄清楚
- 链接到libkcapi时没有核心转储
- 检测到堆栈粉碎:已终止 中止(核心已转储)
- 正在处理故障(堆芯转储)
- 分段错误(核心转储) - 使用 SavedModel 的 Tensorflow C++ API 进行推断
- 我不知道为什么这段代码会让核心被转储?
- C++运行时错误与快速排序算法抛出堆栈转储错误
- 在基数排序中,我得到 munmap_chunk():无效指针和中止(核心转储).为什么?
- C++指针无法在函数外部传递值和分段错误(核心转储)错误
- cygwin_exception::open_stackdumpfile:将堆栈跟踪转储到 class4.exe.sta
- C++快速将 int 数组内容转储到文本文件中
- 合并排序:分段错误核心转储
- WinDbg 不显示某些小型转储文件的完整堆栈跟踪