求助:实现两个矩阵的乘法bug(Program receive signal SIGSEGV,Segmentation fault)
程序代码:
/*实现两个矩阵的乘法*/ #include<stdio.h> #include<stdlib.h> int main() { int r1,c1; //分别为第一个矩阵的行数 列数 int r2,c2; int**matrix1; //声明第一个矩阵 int**matrix2; int**matrix_result; printf("Please input the first Matrix's row\n"); scanf("%d",&r1); printf("Please input the first Matrix's column\n"); scanf("%d",&c1); matrix1= (int **)malloc(sizeof(int *)*r1); //为第一个矩阵申请内存空间 for (int i=0; i<r1; i++) matrix1[i] = (int *)malloc(sizeof(int)*c1); for(int i=0;i<r1;i++) for(int j=0;j<c1;j++) scanf("%d",&matrix1[i][j]); printf("Please input the second Matrix's row\n"); scanf("%d",&r2); printf("Please input the second Matrix's column\n"); scanf("%d",&c2); matrix2= (int **)malloc(sizeof(int *)*r2); for (int i=0; i<r2; i++) matrix1[i] = (int *)malloc(sizeof(int)*c2); for(int i=0;i<r2;i++) for(int j=0;j<c2;j++) scanf("%d",&matrix1[i][j]); printf("The first matrix is \n"); //输出第一个矩阵 for(int i=0;i<r1;i++) { for(int j=0;j<c1;j++) printf("%-5d",matrix1[i][j]); printf("\n"); } printf("The second matrix is \n"); for(int i=0;i<r2;i++) { for(int j=0;j<c2;j++) printf("%-5d",matrix1[i][j]); printf("\n"); } if(c1!=r2) //如果不符合矩阵的计算法则 则退出 { printf("These matrixs are not reasonable!!!\n"); return -1; } else { matrix_result= (int **)malloc(sizeof(int *)*r1); //为计算后的矩阵申请内存 for (int k=0; k<r1; k++) matrix_result[k] = (int *)malloc(sizeof(int)*c2); for(int i=0;i<r1;i++) for(int j=0;j<c2;j++) { matrix_result[i][j]=0; for(int m=0, n=0;m<c1;m++,n++) matrix_result[i][j]+=(matrix1[i][m]*matrix2[n][j]); //计算输出矩阵中第i行,第j列的元素 } for(int p=0;p<r1;p++) //输出计算结果 { for(int q=0;q<c2;q++) printf("%-5d",matrix1[p][q]); printf("\n"); } } for (int f1=0;f1<r1;f1++) free(matrix1[f1]); //释放内存空间 free(matrix1); for (int f2=0;f2<r2;f2++) free(matrix2[f2]); free(matrix2); for (int f3=0;f3<r1;f3++) free(matrix_result[f3]); free(matrix_result); return 0; }
GDB调试后显示如图
且指明 matrix_result[i][j]+=(matrix1[i][m]*matrix2[n][j]); //计算输出矩阵中第i行,第j列的元素 有错