0

次のコードでセグメンテーション違反エラーが発生しました。

struct matrix {
int nl, nc ;
int** mat ;
};

 Matrix* initMatrix (int nlines, int ncol) {
    struct matrix* mat ;
    mat = (struct matrix*)malloc(sizeof(struct matrix)) ;
    mat->nl = nlines ;
    mat->nc = ncol ;
    int i ;
    mat->mat = (int **)malloc((mat->nl)*sizeof(int *)) ;
    for (i=0;i<(mat->nl); i++) {
        mat->mat[i] = (int*)malloc((mat->nc)*sizeof(int)) ; 
    }
    return mat ;
}   

Matrix* transp (Matrix* mat) {
    int i, j;
    int linesTrp = mat->nc ;
    int colTrp = mat->nl ;
    Matrix* trp = initMatrix (linesTrp, colTrp) ;   
    for (i=0; i<(linesTrp); i++) {
        for (j=0; j<(colTrp); j++) {        
            trp->mat[j][i] = mat->mat[i][j] ;
        }
    }
    return trp;
}

どうやら、プログラムが次の行に到達すると、セグメンテーション違反メッセージが表示されます。

for (j=0; j<(colTrp); j++) {

誰かが私を助けることができれば、私は感謝します。また、最終的に悪い英語で申し訳ありません(私はブラジル出身です)

4

2 に答える 2

0

ポール・ドレイパー、あなたはほぼ正しいです。正しいコードは次のようになるはずです。

Matrix* transp (Matrix* mat) {
    int i, j;
    int linesTrp = mat->nc ;
    int colTrp = mat->nl ;
    Matrix* trp = initMatrix (linesTrp, colTrp) ; // was correct originally
    for (i=0; i< colTrp; i++) {                   // edited to correctly address mat->mat
        for (j=0; j< linesTrp; j++) {             // edited to correctly address mat->mat
            trp->mat[j][i] = mat->mat[i][j] ; //edited
        }
    }
    return trp;
}
于 2013-11-03T19:46:37.813 に答える