有人可以指出我的代码中的错误吗
Could someone please point out the error in my code
#include<stdio.h>
int main()
{
setbuf(stdout,NULL);
int p,q,r,s,a[p][q],b[r][s],i,j,k,u,v,res[u][v],sum=0;
printf("Enter the number of rows and columns of the 1st matrix: ");
scanf ("%d%d",&p,&q);
printf("Enter the number of rows and columns of the 2nd matrix: ");
scanf ("%d%d",&r,&s);
printf("Enter the elements of matrix1: ");
u=p;
v=s;
for(i=0;i<p;i++)
{
for(j=0;j<q;j++)
{
scanf("%d",&a[i][j]);
}
}
printf("Enter the elements of matrix2: ");
for(i=0;i<r;i++)
{
for(j=0;j<s;j++)
{
scanf("%d",&b[i][j]);
}
}
for(i=0;i<p;i++)
{
for(j=0;j<s;j++)
{
for(k=0;k<r;k++)
{
sum+=a[i][k]*b[k][j];
}
res[i][j]=sum;
sum=0;
}
}
printf("The resultant matrix is: ");
for(i=0;i<p;i++)
{
for(j=0;j<s;j++)
{
printf("%d\t",res[i][j]);
}
printf("\n");
}
return 0;
}
**我正在尝试编写一个程序来执行矩阵乘法。代码没有被执行……它只是终止,我真的找不到错误。当我在网上尝试 运行 时,我得到了“总线错误(代码转储)错误 135”...但是在我的系统中,程序只是在没有错误的情况下终止。请帮我找出我遗漏的错误或概念这里.. **
在代码中
int p,q,r,s,a[p][q],b[r][s],i,j,k,u,v,res[u][v],sum=0;
您正在使用未初始化的 p
、q
、r
、s
、u
和 v
的值。因为它们有自动存储(本地范围)并且类型 int
可以有陷阱表示,并且变量 u
和 v
永远不会使用它们的地址,它会调用 undefined behaviour.即使对于 u
和 v
以外的其他变量,其值也是不确定的,导致实际代码无效。
要解决此问题,请在将值扫描到要用作数组维度的相应变量后定义 VLA。
#include<stdio.h>
int main()
{
setbuf(stdout,NULL);
int p,q,r,s,a[p][q],b[r][s],i,j,k,u,v,res[u][v],sum=0;
printf("Enter the number of rows and columns of the 1st matrix: ");
scanf ("%d%d",&p,&q);
printf("Enter the number of rows and columns of the 2nd matrix: ");
scanf ("%d%d",&r,&s);
printf("Enter the elements of matrix1: ");
u=p;
v=s;
for(i=0;i<p;i++)
{
for(j=0;j<q;j++)
{
scanf("%d",&a[i][j]);
}
}
printf("Enter the elements of matrix2: ");
for(i=0;i<r;i++)
{
for(j=0;j<s;j++)
{
scanf("%d",&b[i][j]);
}
}
for(i=0;i<p;i++)
{
for(j=0;j<s;j++)
{
for(k=0;k<r;k++)
{
sum+=a[i][k]*b[k][j];
}
res[i][j]=sum;
sum=0;
}
}
printf("The resultant matrix is: ");
for(i=0;i<p;i++)
{
for(j=0;j<s;j++)
{
printf("%d\t",res[i][j]);
}
printf("\n");
}
return 0;
}
**我正在尝试编写一个程序来执行矩阵乘法。代码没有被执行……它只是终止,我真的找不到错误。当我在网上尝试 运行 时,我得到了“总线错误(代码转储)错误 135”...但是在我的系统中,程序只是在没有错误的情况下终止。请帮我找出我遗漏的错误或概念这里.. **
在代码中
int p,q,r,s,a[p][q],b[r][s],i,j,k,u,v,res[u][v],sum=0;
您正在使用未初始化的 p
、q
、r
、s
、u
和 v
的值。因为它们有自动存储(本地范围)并且类型 int
可以有陷阱表示,并且变量 u
和 v
永远不会使用它们的地址,它会调用 undefined behaviour.即使对于 u
和 v
以外的其他变量,其值也是不确定的,导致实际代码无效。
要解决此问题,请在将值扫描到要用作数组维度的相应变量后定义 VLA。