2012-12-01 6 views
11

プログラム:NとLの2つの数値をとるプログラムを作った。Nは2D配列のサイズであり、Lは3 - 16の数値である。プログラムは配列を構築し、私は中心の値であり、あなたが配列を通過するとき(螺線形で)、値が1だけ増加します。それは素数です、その数はその場所に割り当てられていない場合は、それ*は、代わりにその場所を取る浮動小数点例外(コアダンプ

エラー:?私はこの問題を解決する方法を、「浮動小数点例外」エラーを取得しています

コード:

void Array_Loop(int *Array, int n, int L) ; 

int Is_Prime(int Number) ; 

int main(int argc, char *argv[]){ 

    int **Array ; 
    int n, L ; 

    n = atoi(argv[1]) ; 
    L = atoi(argv[2]) ; 

    Matrix_Build(&Array, n, n) ; 
    Array_Loop(Array, n, L) ; 


    return 0 ; 

} 

void Array_Loop(int *Array, int n, int L){ 

    int i, j, k, h ; 
    int lctn, move; 

    lctn = n/2 + 1 ; 
    i = lctn ; 
    j = lctn ; 
    move = 1 

    while(i != 0 && j != n){ 

    for(j = lctn ; j < lctn + move ; j++){ 

     if(L % 2 == 2) Array[i][j] = -1 ; 
     else Array[i][j] = Is_Prime(L) ; 
     L++ ; 
    } 

    move = move * -1 ; 

    for(i = i ; i > lctn - move ; i--){ 

     if(L % 2 == 2) Array[i][j] = -1 ; 
     else Array[i][j] = Is_Prime(L) ; 
     L++ ; 
    } 

    move-- ; 

    for(j = j ; j > lctn - move ; j--){ 

     if(L % 2 == 2) Array[i][j] = -1 ; 
     else Array[i][j] = Is_Prime(L) ; 
     L++ ; 
    } 

    move = move * -1 ; 

    for(i = i ; i < lctn - move ; i--){ 

     if(L % 2 == 2) Array[i][j] = -1 ; 
     else Array[i][j] = Is_Prime(L) ; 
     L++ ; 
    } 

    move++ ; 

    } 

} 


int Is_Prime(int Number){ 

    int i ; 

    for(i = 0 ; i < Number/2 ; i++){ 

    if(Number % i != 0) return -1 ; 

    } 

    return Number ; 

} 
+8

あなたは、分裂しています/ゼロで修正する。 – Mysticial

+1

最初の繰り返しで 'Number%i' ...' i = 0'を返します。 – Mysticial

+0

また、 'move <0'、' lctn - move> lctn'。あなたの兆候を見てください。 –

答えて

22

番号%iが0である私、ので、あなたは、浮動小数点例外を取得している:I = 1番号%で、私はそれが常に等しくなるので

int Is_Prime(int Number){ 

    int i ; 

    for(i = 0 ; i < Number/2 ; i++){ 

    if(Number % i != 0) return -1 ; 

    } 

    return Number ; 

} 

ちょうど私= 2でループを開始Numberはintであるため、0に設定します。

Btw:Mysticialが最初にコメントを指摘しました。

+1

保存しました。ありがとうございました – kapil

+0

喜んで助けてください... – dreamcrash

6

予期しない無限大またはNaNのために浮動小数点例外が発生します。 gdbを使ってそれを追跡することができます。gdbは、実行中にCプログラム内で何が起こっているのかを見ることができます。詳細については:一言で言えば https://www.cs.swarthmore.edu/~newhall/unixhelp/howto_gdb.php

、これらのコマンドは役に立つかもしれない...

gcc -g myprog.c

gdb a.out

gdb core a.out

ddd a.out

関連する問題