[英]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.