求助:实现两个矩阵的乘法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列的元素 有错



恩 谢谢您 下次一定会在注意的