2017-07-07 8 views
0

私は分子の配列が0でいっぱいのときに比を計算しようとしていますが、分子配列の値をとるとプログラムが壊れます。セグメンテーション違反セグメンテーションフォールトC++の分子配列の値が

223 Double_t *ratio_calculations(int bin_numbers, Double_t *flux_data) 
224 { 
225   Double_t *ratio; 
226   for(int n = 0; n <bin_numbers; n++) 
227   { 
228     if(0 < flux_data[n]) 
229     { 
230 
231       ratio[n] = ygraph.axis_array[n]/flux_data[n]; 
232     } 
233   } 
234   return ratio; 
235 } 

私はそれがなぜ起こるかわかりませんし、そう私は私の配列の長さをチェックして、彼らはbin_numbersの値と同じです。

+3

あなたがにメモリを割り当てることを忘れ比。 – user1438832

+0

@ user1438832あなたは答えとして投稿してください –

答えて

1

あなたは、ratioの正しいサイズを決定メモリを割り当て、そして最後に、あなたがifステートメントを使用して無効なデータをフィルタとして使用すると、正しくratio を記入してください必要があります。

Double_t *ratio_calculations(int bin_numbers, Double_t *flux_data) { 
    // get correct size 
    int sz = 0; 
    for (int n = 0; n < bin_numbers; n++) { 
    if (flux_data[n] > 0) sz++; 
    } 
    Double_t *ratio = new Double_t[sz]; 
    // allocate with non-n index, as n increments even when data is invalid (flux_data[n] < 0) 
    int r_idx = 0 
    for (int n = 0; n <bin_numbers; n++) { 
    if (flux_data[n] > 0) { 
     ratio[r_idx] = ygraph.axis_array[n]/flux_data[n]; 
     r_idx++; 
    } 
    } 
    return ratio; 
} 
+0

あなたがそれをもう必要としないときに比率を忘れないように忘れないでください!あるいは、代わりにベクトルを使うのが良いでしょう。 @ Logman。 – Logman

+0

私はOPがこれを知っていることを願っています。あなたが終わったらOP、 'delete [] ratio;' –

関連する問題