-1

ワークショップを終了しようとしていますが、if ステートメントで inputVector 関数を呼び出した後、セグメンテーション エラーが発生します。なぜエラーが発生するのかわかりません。コンパイル時に警告はなく、渡された配列のテストでは実際に記録された内容が表示されます。OSX Maverick を実行していますが、Linux システムでもテストしましたが、役に立ちませんでした。誰かがこれに光を当てることができれば、本当に感謝しています。

#include <stdio.h>
#include "matrix.h"

int main() {

    int row = 0 , col = 0, option = 0;
    int vector[9], result[9];
    int matrix[9][9];

    do{
        printf("Number of rows (0 to exit) ? ");
        scanf("%d", &row);
        if(row != 0) {
            printf("Number of columns          ? ");
            scanf("%d", &col);

            inputMatrix(row, col, matrix);

            printf("Pre (0) or Post (1) Multiply ? ");
            scanf("%d", &option);

            if(option == 0){
                inputVector(row, vector);
                printf("TESTING 1");
                preMulti(row, col, matrix, vector, result);
                printf("TESTING 2");
                display(col, result);
            }
            else if(option == 1){ 
                inputVector(col, vector);
                postMulti(row, col, matrix, vector, result);
                display(row, result);
            }

            return 0;       
        }// END IF
    } while( row != 0 );// End While

} // End Main

マトリックス.cpp

#include "matrix.h"
#include <stdio.h>

void inputMatrix(int row , int col, int matrix[][MAXCOL]) {
    for ( int i = 0; i < row; i++) {
        printf("Row %d ? ", i + 1);
        for ( int k = 0; k < col; k++)
            scanf("%d", &matrix[i][k]);
    }
}
void inputVector(int size, int vector[]) {
    printf("Vector? ");
    for(int i = 0; i < size; i++){
        scanf("%d" , &vector[i]);
        printf(" Recorded %d \n", vector[i]);
    }
    printf("TESTING 3");
}

void preMulti(int row, int col, int matrix[][MAXCOL], int vector[], int result[]) {
    for(int i = 0; i < col; i++ ) {
        result[i] = 0;
        for( int k = 0; k < row; i++) 
            result[i] += vector[k] * matrix[k][i];
    }
}
void postMulti(int row, int col, int matrix[][MAXCOL], int vector[], int result[]) {
    for( int i = 0; i < row; i++ ) {
        result[i] = 0;
        for( int k = 0; k < col; i++) 
            result[i] += vector[k] * matrix[i][k];
    }
}

void display(int size, int vector[]) {
    printf("Result: ");
    for ( int i = 0; i < size; i++)
        printf("%d ", vector[i]);
}
4

3 に答える 3

1

これがあなたの問題です(少なくともセグメンテーション違反を引き起こしている問題です)、これはいくつかの場所で発生しpreMulti()ますpostMulti()

for( int k = 0; k < row; i++) 

k++ではなく、最後にある必要がありi++ます。

于 2013-11-03T03:10:32.840 に答える
1

私はデバッガーを使用しましたが、問題はあなたの機能ではなく、ここにあることがわかりました(アナログが機能しない場合、inputVector他にどのように機能しますか?):inputMatrixinputVector

void preMulti(int row, int col, int matrix[][MAXCOL], int vector[],int result[]){
        for(int i = 0; i < col; i++ ) {
            result[i] = 0;
            for( int k = 0; k < row; i++)              // i++ will cause SIGSEGV 
                result[i] += vector[k] * matrix[k][i]; // probably k++ ?
        }
    }
于 2013-11-03T03:12:35.920 に答える