11.exe已停止工作(代码块)

时间:2015-03-31 09:10:56

标签: c

这是一个简单的程序来查找方形矩阵的痕迹,但每当我尝试运行代码时,弹出“11.exe已停止工作”。

我有Windows 8.1

我正在使用GNU GCC编译器。 这是代码:

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int n,i,j,a[n][n],tr=0;
    printf("enter order of square matrix\n");
    scanf("%d",&n);
    printf("enter the entries of matrix\n");
    for(i=0;i<n;i++)
    {
        for(j=0;j<n;j++)
        {
            printf("a[%d][%d]",i+1,j+1);
            scanf("%d",&a[i][j]);
        }
        tr+=a[i][i];
    }
    for(i=0;i<n;i++)
    {
        for(j=0;j<n;j++)

        {
            printf("%d",a[i][j]);
        }
        printf("\n");
    }
    printf("trace of matrix is\t%d",tr);
    return 0;
}

2 个答案:

答案 0 :(得分:4)

在您的代码中

a[n][n]

调用undefined behaviour。因为你已经使用过n了。价值未初始化。这肯定不是你使用VLA的方式。

供参考,来自C11标准文件

第1点。6.7.9章,第10段,

  

如果没有显式初始化具有自动存储持续时间的对象,则其值为   不确定的。

.... [int n的情况,n未明确初始化

第2点。

来自附件J,第J.2章,未定义行为的原因,

  

使用具有自动存储持续时间的对象的值   不确定的。

.... [a[n][n],的情况]

<强>解决方案:

在成功扫描 a的值后,您需要移动n的定义。

答案 1 :(得分:1)

 int n,i,j,a[n][n],tr=0;
 printf("enter order of square matrix\n");
 scanf("%d",&n);

应该是

int n,i,j,tr=0;
printf("enter order of square matrix\n");
scanf("%d",&n);
int a[n][n];

现在a是一个可变长度数组(VLA)。 C99支持VLA。

您的问题的原因已由 @Sourav

解释