矩阵乘法中的分割误差

时间:2018-11-02 11:55:15

标签: c

我的任务是使用函数,指针和数组将2个矩阵相乘。出现分段错误,调试器显示退出值-1。但是,控制台中没有错误和警告。请帮忙!

int main(void) {
    int matrix1[3][3] = {{1,2,3}, {4,5,6}, {7,8,9}};
    int matrix2[3][3] = {{9,8,7}, {6,5,4}, {3,2,1}};
    int rowm1 = sizeof(matrix1)/sizeof(matrix1[0]);
    int colm1 = sizeof(matrix1[0])/sizeof(matrix1[0][0]);
    int rowm2 = sizeof(matrix2)/sizeof(matrix2[0]);
    int colm2 = sizeof(matrix2[0])/sizeof(matrix2[0][0]);
    int result[rowm1][colm2];
    matmul(&matrix1, &matrix2, rowm1, rowm2, colm1, colm2, &result);
return EXIT_SUCCESS;
}
void matmul(int **matrix1, int **matrix2, int rowm1, int rowm2, int colm1, int colm2, int **result) {
    int i,j,k,sum;
    for (i=0; i<rowm1; i++){
         for(j=0;j<colm2;j++){
             sum=0;
            for(k=0; k<colm1; k++) {
                           //Hear comes a Segmentation Error
                    printf("%d   %d \n", matrix1[0][0], matrix2[0][0]);
                    sum += matrix1[i][k] * matrix2[k][j];
                    result [i][j] = sum;
                    printf("%d\n", sum);
                }
            }
        }
}

1 个答案:

答案 0 :(得分:1)

需要在代码中进行更改的事物。

将函数调用更改为下面的行。

NaN

您还需要像这样更改功能参数

matmul(rowm1, rowm2, colm1, colm2, matrix1, matrix2, result);

接收时,您将需要在void matmul(int rowm1, int rowm2, int colm1, int colm2, int matrix1[rowm1][colm1], int matrix2[rowm2][colm2], int result[rowm1][colm2]) { 中提供矩阵的大小。人们偏爱Java的原因。

还可以更改矩阵的打印样式并使其缩进。

在使用C之前,您需要对其进行声明。这不是一个定义的常数。