【发布时间】:2021-10-28 10:43:54
【问题描述】:
我正在尝试在 C 编程中使用动态内存分配来执行矩阵乘法,其中我将用户输入用于每个矩阵的行数和列数。当 r1=c2(mat1 r1xc1 and mat2 r2xc2) 但 mat 4x2 和 mat 2x3 给出分段错误时,输出是正确的。敬请指教。
代码如下:
#include<stdio.h>
#include<stdlib.h>
void create(int **arr,int r,int c)
{
int i,j;
for(i=0;i<r;i++)
{
arr[i]=(int*)malloc(sizeof(int)*c);
for(j=0;j<c;j++)
scanf("%d",*(arr+i)+j);
}
}
void display(int **arr,int r,int c)
{
int i,j;
for(i=0;i<r;i++)
{
for(j=0;j<c;j++)
printf("%d ",*(*(arr+i)+j));
printf("\n");
}
}
void multiply(int **arr1,int **arr2,int **arr3,int r,int c1,int c2)
{
int i,j,k;
for(i=0;i<r;i++)
{
for(j=0;j<c2;j++)
{
arr3[i][j]=0;
for(k=0;k<c1;k++)
*(*(arr3+i)+j) += *(*(arr1+i)+k) * *(*(arr2+k)+j);
}
}
}
int main()
{
int **arr1,r1,c1,**arr2,r2,c2,**arr3;
printf("Enter rows and columns of first matrix: ");
scanf("%d %d",&r1,&c1);
arr1=(int**)malloc(sizeof(int*)*r1*c1);
printf("\nEnter elements of first matrix: ");
create(arr1,r1,c1);
printf("\nThe first matrix is: \n");
display(arr1,r1,c1);
printf("\nEnter rows and columns of second matrix: ");
scanf("%d %d",&r2,&c2);
arr2=(int**)malloc(sizeof(int*)*r2*c2);
printf("\nEnter elements of second matrix: ");
create(arr2,r2,c2);
printf("\nThe second matrix is: \n");
display(arr2,r2,c2);
if(c1!=r2)
{
printf("\nInvalid dimensions.");
exit(0);
}
arr3=(int**)malloc(sizeof(int*)*r1*c2);
printf("\nThe product is: \n");
multiply(arr1,arr2,arr3,r1,c1,c2);
display(arr3,r1,c2);
free(arr1);
free(arr2);
free(arr3);
return 0;
}
【问题讨论】:
-
导致问题的具体输入是什么?
标签: c dynamic-memory-allocation matrix-multiplication