2016-12-17 41 views
-1

タイトルはかなり明確だと思います。

行列式を使用して3x3線形システムを計算するプログラムを作成しようとしていますが、セグメント化エラーが発生しています。ここでは、コードは次のようになります。セグメンテーションフォルト[139]が表示されるのはなぜですか?

#include<stdio.h> 
int determinant(int n, int m, int det[m][n]) 
{ 
    int res; 
    res = det[0][0]*det[1][1] - det[0][1]*det[1][0]; 
    return res; 
} 
int main(void) 
{ 
    int arr[3][4], det[2][2], i, j, D; //Dx1, Dx2, Dx3 
    for(i = 0; i < 3; i++) 
    { 
     printf("Eisagete tous suntelestes ths %dhs eksisoshs.", i+1); 
     scanf("%d %d %d %d", &arr[i][0], &arr[i][1], &arr[i][2], &arr[i][3]); 
    } 
    for(i = 0; i < 2; i++) 
    { 
     for(j = 0; j < 2; i++) 
     { 
      det[i][j] = arr[i+1][j+1]; 
     } 
    } 
    D = arr[0][0]*determinant(2, 2, det); 
    for(i = 0; i < 2; i++) 
    { 
     for(j = 0; j < 2; i++) 
     { 
      det[i][j] = arr[i+1][j+((j == 1) ? 1 : 0)]; 
     } 
    } 
    D -= arr[0][1]*determinant(2, 2, det); 
    for(i = 0; i < 2; i++) 
    { 
     for(j = 0; j < 2; i++) 
     { 
      det[i][j] = arr[i+1][j]; 
     } 
    } 
    D += arr[0][2]*determinant(2, 2, det); 
    printf("%d\n", D); 
} 

私は右mainに最初forのループを完了した後にエラーを取得しています。ブロック内

+1

あなたはどこワンセグを見つけるためにデバッガを使用しています障害が発生しますか? –

+0

申し訳ありませんが、私はOPでこれを言及しませんでした。編集して追加しました。これは、最初のforループの後に発生します。 – AQUATH

+1

これはOKではありません: 'int determinant(int n、int m、int det [m] [n])' –

答えて

0

for(i = 0; i < 2; i++) 
{ 
    for(j = 0; j < 2; i++) 
    { 
     det[i][j] = arr[i+1][j+1]; 
    } 
} 

両方のループ内iをインクリメントし、アレイからの読み出しながら1以上を添加します。だからarr[i+1]にあなたは遠くに読んでいる。

セグメンテーションフォルトは基本的に、アクセス権のないものを読み取ろうとしていることを意味します。

関連する問題