繁体   English   中英

解码运行时错误(SIGFPE)

[英]decoding the runtime error (SIGFPE)

这是spoj.com( http://www.spoj.com/problems/PRIC/ )的问题。我们必须检查序列号是否为:ai =(a(i-1)+1234567890)mod 2 ^ 31是素数还是不是素数,第一个数是1。我的代码如下(基于eratosthenes的筛选)(请尝试忽略笨拙。)

问题:我们必须打印“ prime(1)or not(0)”,直到i = 33,333,333为止,我的代码对于i(代码中的c3)值高达8000左右(例如c3> 19000)它开始给出SIGFPE错误。 现在,我在错误中搜索了一下,它与除以0的除数/模数有关。但是为什么代码对c3值高达9000起作用,但没有超出?

根据您的编译器和开发环境,您应该阅读调试器的概念。 这个答案有使用gdb的指南。 如果您使用的是Visual Studio,Code :: Blocks或任何其他IDE,请查找调试功能。 例如,如何设置断点或进入/退出/通过函数调用,例如观察或更改变量等。(我提到这些是给您有关Google搜索字词的重要提示,眨动眨动一下) 。

编辑

复制粘贴代码并保存,用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

嘿,我的回答不被接受! -那是为什么:)?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM