program.exe已停止工作......请找错?

时间:2017-07-13 10:56:48

标签: c multidimensional-array codeblocks

#include<stdio.h>
void main(){
int m,n,m1,n1,a[m][n],b[m1][n1],s=0,i,j,c[m][n1],i1,j1;
printf("Enter no. of rows...& no. of columns..of 1st matrix");
scanf("%d",&m);
scanf("%d",&n);
printf("Enter no. of rows...& no. of columns..of 2nd matrix");
scanf("%d",&m1);
scanf("%d",&n1);
if(n!=m1){
    printf("Matrix multiplication can't be performed.Please check the order 
of the matrices.");
}
else{
    for(i=1;i<=m;i+=1){
        for(j=1;j<=n;j+=1){
            s+=a[i][j]*b[j][i];
        }
for(i1=1;i1<=m;i1+=1){
for(j1=1;j1<=n1;j1+=1){
    c[i1][j1]=s;
    printf("%d",c[i1][j1]);
}
printf("\n");
}
    }

}



}

当我做它时..它显示没有错误 但在运行代码时,它显示.exe已停止工作 请提一下我的代码中的错误......以前在codeblocks ide中运行过的程序已经正确执行了.....

1 个答案:

答案 0 :(得分:2)

目前你的代码看起来像这样(我已经减少了变量的数量以便于阅读)。

int m,n;
int a[m][n];
printf("Enter no. of rows...& no. of columns..of 1st matrix");
scanf("%d",&m);
scanf("%d",&n);

当您声明数组a时,mn的值未定义 - 它们可以是适合int的任何值。例如,它们可能为0,这意味着您已将a声明为a[0][0]。然后,您会获得mn的值,在哪个阶段为时已晚。无论哪种方式,您的代码都将遭受未定义的行为。

一个可能的解决方案是为像这样的矩阵分配内存......

int m,n;
int **a;
printf("Enter no. of rows...& no. of columns..of 1st matrix");
scanf("%d",&m);
scanf("%d",&n);
a=malloc(sizeof(*a)*m);
for(i=0;i<m;i++)
  {
  a[i]=malloc(sizeof(*a[i])*n);
  }

您需要记住free()使用完毕后分配的内存。