gpt4 book ai didi

c++ - 解码运行时错误 (SIGFPE)

转载 作者:行者123 更新时间:2023-11-30 18:25:44 24 4
gpt4 key购买 nike

这是 spoj.com ( http://www.spoj.com/problems/PRIC/ ) 上的问题。我们必须检查序列中的数字是否为质数:ai=( a(i-1)+1234567890 ) mod 2^31 是否为质数,第一个数字为 1 。我的代码如下(请尝试忽略笨拙。)基于埃拉托斯特尼筛。

问题:我们必须为 i=33,333,333 之前的序列打印“prime(1) or not(0)”,我的代码对于 i(代码中的 c3)值达到 8000 左右并且之后(例如 c3>19000 )它开始给出 SIGFPE 错误。现在我用 google 搜索了这个错误,它与除/模除以 0 有关。但是为什么代码适用于 9000 以内的 c3 值,但不能超过 9000?

最佳答案

根据您的编译器和开发环境,您应该阅读调试器的概念。 This answer有使用gdb的指南。如果您使用的是 Visual Studio、Code::Blocks 或任何其他 IDE,请查找调试功能。例如,如何设置断点或单步进入/退出/跳过函数调用,观察或更改变量等。(我提到这些事情是为了给你谷歌搜索词的重要提示,眨眼轻推) .

编辑:

复制粘贴代码并保存,使用 gcc -g 编译用于调试符号,使用 -lm 链接数学库,我通过 运行它gdb 它给了我这个输出:

Program received signal SIGFPE, Arithmetic exception.
0x0000000000400707 in sieve (prime=0x6626a0) at t.c:43
43 if (a%prime2[j]==0){

这告诉您查看第 43 行,使用模运算的 if 语句。这似乎是您进行模零运算的地方。

请注意,我从 Stackoverflow 复制粘贴您的代码时得到的文档中的第 43 行可能不是您文档中的第 43 行。

编辑2:

嘿,我的回答没有被接受! - 为什么会这样:)?

关于c++ - 解码运行时错误 (SIGFPE),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23918999/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com