我的任务是使用函数,指针和数组将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);
}
}
}
}
答案 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
之前,您需要对其进行声明。这不是一个定义的常数。