簡體   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