2017-10-04 3 views
0

統計アルゴリズムを使用しており、セグメント化エラーが発生していますが、私はそれを見ることができません。私はかなりメモリを正しくコールしていると確信しています。私はループのいくつかの繰り返しの後にのみ障害を取得するので、多分それがアンダーフローと何かを持っているのだろうかと思っています。コードは私のprintfと一緒にデバッグするためのものです。申し訳ありませんが、シンタックスが少し混乱している場合は、雑誌の出版物に従っています。次アルゴリズム内の小数で予期しないセグメント化エラーが発生しました

// *** n and m defined previously 
float *aux_arr = calloc(n, sizeof(float)); 
if (aux_arr == NULL) { 
    printf("calloc failed"); 
} 

int j; 
int j0 = 1; 
int j1 = 1; 
aux_arr[1] = 1; 

for (size_t i = 0; i < n - 1; i++) { 
    printf("\nOUTER\n"); 
    j1 += 1; 
    printf("i: %zu\n", i); 
    printf("j1: %i\n", j1); 

    for (j = j1; j >= j0; j--) { 
     printf("\nINNER\n"); 
     printf("j: %i\n", j); 
     printf("j1: %i\n", j1); 
     printf("j0: %i\n", j0); 

     // print first 5 elements of my aux_arr 
     for (int i = 0; i < 5; i++) { 
      printf("%f\n", aux_arr[i]); 
     } 

     aux_arr[j] = (j/m) * (aux_arr[j]) + (1 + (1/m) - (j/m)) * (aux_arr[j - 1]); 


     if (aux_arr[j] < (1.0 * pow(10, -20))) { 
      aux_arr = 0; 
      if (j == j1) { 
       j1 -= -1; 
      } 
      if (j == j0) { 
       j0 += 1; 
      } 
     } 
    } 
} 

出力:

OUTER 
i: 0 
j1: 2 

INNER 
j: 2 
j1: 2 
j0: 1 
0.000000 
1.000000 
0.000000 
0.000000 
0.000000 

INNER 
j: 1 
j1: 2 
j0: 1 
0.000000 
1.000000 
1.000000 
0.000000 
0.000000 

OUTER 
i: 1 
j1: 3 

INNER 
j: 3 
j1: 3 
j0: 2 
Segmentation fault: 11 

あなたは、私がアクセスしようとすると、問題が来ることを見ることができます私のaux_arr 3回目。私はなぜそれが最初の2回うまく動作するかわからない。

ありがとうございます!

+0

デバッガでコードをステップ実行しましたか?それが第一のことです。 – OldProgrammer

+1

サンプルコードをコピーして貼り付け、コンパイルして実行できる[完全なプログラム](https://stackoverflow.com/help/mcve)に展開できますか? –

+0

外側のループでは反復変数として 'i'を使用し、最初の5つの要素を出力するにはループを使用するのは混乱します。 – Barmar

答えて

2
aux_arr = 0; 

これはあなたの犯人です。 aux_arrayをヌルポインタに設定しているため、次のアクセスは無効です。

+0

うまく見つかった:-)おそらく 'aux_arr [j] = 0'が意図されていた – 4386427

+0

実際には、aux_arr [j] = 0'であるはずでした。非常に単純ですが、私はそれを見ることができませんでした。 – Davigor

関連する問題