c - 为什么这个代码块显示堆栈粉碎检测?
问题描述
所以我无法运行我在下面附加的代码。该程序是关于2个矩阵的乘法。我得到堆栈粉碎检测。我是这个问题的新手。我的操作系统是 Ubuntu 18.04
#include<stdio.h>
#define R1 3
#define C1 4
#define R2 C1
#define C2 2
void main()
{
int i,j,k,mat1[R1][C1],mat2[R2][C2],mat3[R1][C2];
printf("Enter 1st matrix(%dX%d) :",R1,C1);
for(i=0;i<R1;i++)
{
for(j=0;j<C1;j++)
{
scanf("%d",&mat1[R1][C2]);
}
}
printf("Enter 2nd matrix(%dX%d) :",R2,C2);
for(i=0;i<R2;i++)
{
for(j=0;j<C2;j++)
{
scanf("%d",&mat1[R1][C2]);
}
}
for(i=0;i<R1;i++)
{
for(j=0;j<C2;j++)
{
mat3[i][j]=0;
for(k=0;k<C1;k++)
{
mat3[i][j] += mat1[i][k] * mat2[k][j];
}
}
}
printf("The resultant matrices are :");
for(i=0;i<R1;i++)
{
for(j=0;j<C2;j++)
{
printf("%5d",mat3[i][j]);
}
printf("\n");
}
}
解决方案
在
for(i=0;i<R1;i++) { for(j=0;j<C1;j++) { scanf("%d",&mat1[R1][C2]); } } printf("Enter 2nd matrix(%dX%d) :",R2,C2); for(i=0;i<R2;i++) { for(j=0;j<C2;j++) { scanf("%d",&mat1[R1][C2]); } }
你没有设置你想要的索引和矩阵,必须是
for(i=0;i<R1;i++)
{
for(j=0;j<C1;j++)
{
scanf("%d",&mat1[i][j]); /* correct indexes */
}
}
printf("Enter 2nd matrix(%dX%d) :",R2,C2);
for(i=0;i<R2;i++)
{
for(j=0;j<C2;j++)
{
scanf("%d",&mat2[i][j]); /* correct matrix and indexes */
}
}
我还鼓励您验证您的scanf返回 1 以检查使用输入有效输入
推荐阅读
- apache-kafka - How add HDFS connector to Kafka Connect API?
- android-studio - 如何让 Android Studio 3.5.3 停止在搜索结果中返回生成的代码?
- firebase - How to listen to future path in firebase
- java - Caused by: org.postgresql.util.PSQLException: database doesn't exist when trying to auto-create database
- sql - 在子查询中生成值的 Oracle SQL 更新语句
- powershell - Remove all groups withen a specific OU
- javascript - ES 模块实现是否支持导入 JSON 文件?
- regex - 如何使用以下元序列使正则表达式中的负面向后看?
- aws-documentdb - AWS DocumentDB TLS connection with Java
- django - Django filtering in views.py with a session variable