繁体   English   中英

矩阵乘法中的分割错误

[英]Segmentation Error in Matrix Multiplication

我的任务是使用函数、指针和数组将 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);
                }
            }
        }
}

您需要在代码中更改几件事。

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

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]) {

在接收时,您需要提供C矩阵的大小。 人们喜欢java的原因。

并且还可以更改矩阵的打印样式并将它们缩进。

在使用EXIT_SUCCESS之前,您需要声明它。 它不是一个定义的常量。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM