c - 我收到错误“问题导致程序停止正常工作。Windows 将关闭程序并在找到解决方案时通知您”
问题描述
我有一个关于两个矩阵乘积的书面 ac 程序。当我编译时我发现没有错误,但当我运行它时我发现上述错误。我尝试了 youtube 视频建议的多种解决方案。但没有任何效果。我有盗版 Windows我的电脑上安装了 10 个副本。我在代码块 20.03上运行程序 这是程序:
#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;
}
注意:我的程序可能不正确,我要做的就是运行程序,然后我会调试它。
解决方案
尝试编译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
and Co. 会更好)。
推荐阅读
- python - Python hyper HTTP20Connection 以 1024 字节块发送数据
- html - Jekyll 正在打印 HTML 而不是渲染它
- java - 在从 Eclipse 导入 Android Studio 过程中,“发现过时的依赖配置:编译视图用法”是什么意思?
- django - Django Channels 2.4 和 Websockets 在 Elastic Beanstalk 和 ElastiCache 上给出 502 错误
- java - 使用 setOnCheckedChangeListener 时切换按钮使应用程序崩溃 - Android
- python - python多行列表输出和排序
- memory - 在读/写字时,多个英特尔处理器竞争条件是否可以交错字节?
- entity-framework - 如何修复错误“初始化字符串的格式不符合从索引 100 开始的规范”
- node.js - Okta OpenID Connect 如何验证 ID_TOKEN 并提取数据?
- javascript - 如何从集合中的所有文档中获取集合中对某个整数字段具有最高值的所有文档