我收到一个错误 "a problem caused the program to stop working correctly.Windows will close the program and notify you if a solution is found"
I get an error "a problem caused the program to stop working correctly.Windows will close the program and notify you if a solution is found"
我编写了一个基于两个 matrices.When 的产品的 c 程序,我编译时没有发现错误,但是当我 运行 时,我发现上述 error.I 已经尝试了多种解决方案youtube 建议 videos.But nothing worked.I 在我的 pc.I 运行 codeblocks 20.03[=18= 上的程序上安装了盗版 windows 10 个副本]
这是程序:
#include<stdio.h>
int main()
{
int r1,r2,c1,c2,a[r1][c1],b[r2][c2],c[r1][c2],sum=0;
printf("Enter the rows and columns Of matrix a and b(r1,c1,r2,c2):");
scanf("%d%d%d%d",&r1,&c1,&r2,&c2);
printf("Input matrices elements");
int i,j;
printf("Input elements of matrix a:");
for(i=0;i<r1;i++){
for(j=0;j<c1;j++)
scanf("%d",&a[i][j]);
}
printf("Input elements of matrix b:");
for(i=0;i<r2;i++){
for(j=0;j<c2;j++)
scanf("%d",b[i][j]);
}
printf("Matrix a is:\n");
for(i=0;i<r1;i++){
for(j=0;j<c1;j++)
printf("%d ",a[i][j]);
}
printf("Matrix b is:\n");
for(i=0;i<r2;i++){
for(j=0;j<c2;j++)
printf("%d ",b[i][j]);
}
if(c1==r2)
printf("\nMatrix multiplication is possible.....\n");
else
return 0;
for(i=0;i<r2;i++){
sum=0;
for(j=0;j<c2;j++)
sum+=a[i][j]*b[j][i];
c[i][j]=sum;
}
printf("\nProduct of matrices is:\n");
for(i=0;i<r1;i++){
for(j=0;j<c2;j++)
printf("%d ",c[i][j]);
printf("\n");
}
return 0;
}
注意:我的程序可能不正确,我只想运行程序和上面的字母我会调试它
你的主要问题在
int r1,r2,c1,c2,a[r1][c1],b[r2][c2],c[r1][c2],sum=0;
当 r1
、r2
、c1
、c2
的值不确定(即未初始化或分配)时,您使用它们的地方。您应该会看到一些编译器警告,类似于
warning: ‘r1’ is used uninitialized in this function [-Wuninitialized]
warning: ‘c2’ is used uninitialized in this function [-Wuninitialized]
warning: ‘r2’ is used uninitialized in this function [-Wuninitialized]
如果您没有看到它们,请使用您的编译器标志来启用警告。
要解决这个问题:您需要先扫描值,然后将它们用作数组维度。
那么,下一个问题:你打错了
scanf("%d",b[i][j]);
应该是
scanf("%d", &b[i][j]);
^^
也就是说,在使用扫描值之前,请始终检查 scanf()
的 return 值以确保扫描成功。
尝试使用 clang -Weverything -Wno-vla
进行编译:
c.c:17:20: warning: format specifies type 'int *' but the argument has type 'int' [-Wformat]
scanf("%d",b[i][j]);
~~ ^~~~~~~
c.c:4:27: warning: variable 'c1' is uninitialized when used here [-Wuninitialized]
int r1,r2,c1,c2,a[r1][c1],b[r2][c2],c[r1][c2],sum=0;
^~
c.c:4:17: note: initialize the variable 'c1' to silence this warning
int r1,r2,c1,c2,a[r1][c1],b[r2][c2],c[r1][c2],sum=0;
^
= 0
c.c:4:23: warning: variable 'r1' is uninitialized when used here [-Wuninitialized]
int r1,r2,c1,c2,a[r1][c1],b[r2][c2],c[r1][c2],sum=0;
^~
c.c:4:11: note: initialize the variable 'r1' to silence this warning
int r1,r2,c1,c2,a[r1][c1],b[r2][c2],c[r1][c2],sum=0;
^
= 0
c.c:4:37: warning: variable 'c2' is uninitialized when used here [-Wuninitialized]
int r1,r2,c1,c2,a[r1][c1],b[r2][c2],c[r1][c2],sum=0;
^~
c.c:4:20: note: initialize the variable 'c2' to silence this warning
int r1,r2,c1,c2,a[r1][c1],b[r2][c2],c[r1][c2],sum=0;
^
= 0
c.c:4:33: warning: variable 'r2' is uninitialized when used here [-Wuninitialized]
int r1,r2,c1,c2,a[r1][c1],b[r2][c2],c[r1][c2],sum=0;
^~
c.c:4:14: note: initialize the variable 'r2' to silence this warning
int r1,r2,c1,c2,a[r1][c1],b[r2][c2],c[r1][c2],sum=0;
^
= 0
您使用垃圾值大小初始化所有矩阵,因为您 1. 没有初始化变量和 2. 在同一行上声明 VLA==> 导致垃圾大小。
首先读取用户的值,然后声明一个 VLA。 (尽管使用 malloc
和 Co. 会更好)。
我编写了一个基于两个 matrices.When 的产品的 c 程序,我编译时没有发现错误,但是当我 运行 时,我发现上述 error.I 已经尝试了多种解决方案youtube 建议 videos.But nothing worked.I 在我的 pc.I 运行 codeblocks 20.03[=18= 上的程序上安装了盗版 windows 10 个副本] 这是程序:
#include<stdio.h>
int main()
{
int r1,r2,c1,c2,a[r1][c1],b[r2][c2],c[r1][c2],sum=0;
printf("Enter the rows and columns Of matrix a and b(r1,c1,r2,c2):");
scanf("%d%d%d%d",&r1,&c1,&r2,&c2);
printf("Input matrices elements");
int i,j;
printf("Input elements of matrix a:");
for(i=0;i<r1;i++){
for(j=0;j<c1;j++)
scanf("%d",&a[i][j]);
}
printf("Input elements of matrix b:");
for(i=0;i<r2;i++){
for(j=0;j<c2;j++)
scanf("%d",b[i][j]);
}
printf("Matrix a is:\n");
for(i=0;i<r1;i++){
for(j=0;j<c1;j++)
printf("%d ",a[i][j]);
}
printf("Matrix b is:\n");
for(i=0;i<r2;i++){
for(j=0;j<c2;j++)
printf("%d ",b[i][j]);
}
if(c1==r2)
printf("\nMatrix multiplication is possible.....\n");
else
return 0;
for(i=0;i<r2;i++){
sum=0;
for(j=0;j<c2;j++)
sum+=a[i][j]*b[j][i];
c[i][j]=sum;
}
printf("\nProduct of matrices is:\n");
for(i=0;i<r1;i++){
for(j=0;j<c2;j++)
printf("%d ",c[i][j]);
printf("\n");
}
return 0;
}
注意:我的程序可能不正确,我只想运行程序和上面的字母我会调试它
你的主要问题在
int r1,r2,c1,c2,a[r1][c1],b[r2][c2],c[r1][c2],sum=0;
当 r1
、r2
、c1
、c2
的值不确定(即未初始化或分配)时,您使用它们的地方。您应该会看到一些编译器警告,类似于
warning: ‘r1’ is used uninitialized in this function [-Wuninitialized]
warning: ‘c2’ is used uninitialized in this function [-Wuninitialized]
warning: ‘r2’ is used uninitialized in this function [-Wuninitialized]
如果您没有看到它们,请使用您的编译器标志来启用警告。
要解决这个问题:您需要先扫描值,然后将它们用作数组维度。
那么,下一个问题:你打错了
scanf("%d",b[i][j]);
应该是
scanf("%d", &b[i][j]);
^^
也就是说,在使用扫描值之前,请始终检查 scanf()
的 return 值以确保扫描成功。
尝试使用 clang -Weverything -Wno-vla
进行编译:
c.c:17:20: warning: format specifies type 'int *' but the argument has type 'int' [-Wformat]
scanf("%d",b[i][j]);
~~ ^~~~~~~
c.c:4:27: warning: variable 'c1' is uninitialized when used here [-Wuninitialized]
int r1,r2,c1,c2,a[r1][c1],b[r2][c2],c[r1][c2],sum=0;
^~
c.c:4:17: note: initialize the variable 'c1' to silence this warning
int r1,r2,c1,c2,a[r1][c1],b[r2][c2],c[r1][c2],sum=0;
^
= 0
c.c:4:23: warning: variable 'r1' is uninitialized when used here [-Wuninitialized]
int r1,r2,c1,c2,a[r1][c1],b[r2][c2],c[r1][c2],sum=0;
^~
c.c:4:11: note: initialize the variable 'r1' to silence this warning
int r1,r2,c1,c2,a[r1][c1],b[r2][c2],c[r1][c2],sum=0;
^
= 0
c.c:4:37: warning: variable 'c2' is uninitialized when used here [-Wuninitialized]
int r1,r2,c1,c2,a[r1][c1],b[r2][c2],c[r1][c2],sum=0;
^~
c.c:4:20: note: initialize the variable 'c2' to silence this warning
int r1,r2,c1,c2,a[r1][c1],b[r2][c2],c[r1][c2],sum=0;
^
= 0
c.c:4:33: warning: variable 'r2' is uninitialized when used here [-Wuninitialized]
int r1,r2,c1,c2,a[r1][c1],b[r2][c2],c[r1][c2],sum=0;
^~
c.c:4:14: note: initialize the variable 'r2' to silence this warning
int r1,r2,c1,c2,a[r1][c1],b[r2][c2],c[r1][c2],sum=0;
^
= 0
您使用垃圾值大小初始化所有矩阵,因为您 1. 没有初始化变量和 2. 在同一行上声明 VLA==> 导致垃圾大小。
首先读取用户的值,然后声明一个 VLA。 (尽管使用 malloc
和 Co. 会更好)。