2017-02-19 8 views
-1

私はこの関数を作成しましたが、ほとんどの入力に対して、クラッシュして「Segmentation Fault:11」というエラーが出ます。どの入力に対して、次のコードでセグメント化エラーが発生する可能性がありますか?このコードはどのようにしてセグメンテーションフォルトを生成できますか?

int cubic_runtime(int const * const data, int n) 
{ 
    int max = 0; 
    int i; 
    int j; 
    int k; 
    int sum = 0; 
    for(i = 0; i <= n - 1; i = i + 1){ 
     for(j = i; j <= n - 1; j = j + 1){ 
      sum = 0; 
      for(k = i; k <= j; k = k + 1){ 
       sum = sum + data[k]; 
      } 
      if(sum > max){ 
       max = sum; 
      } 
     } 
    } 
    return max; 
} 
+2

たとえば、不正なメモリ位置を指すデータの任意の値。デバッガを使用してサンプルを歩くと、すぐに答えが表示されます。 –

+0

@johnelemansデバッガですか?そんなことをどこで見つけることができますか? – RothX

+1

完全にコードを提供してください。 –

答えて

0

segフォールトを回避するために追加できることは、次の点です。指定された入力を常に検証し、サニティチェックします。この場合、 'n'の値は潜在的な障害を引き起こす可能性があります。私は 'データ'は読み取り専用であり、単なる読み込みであるため、問題ないと思います。

関連する問題