【问题标题】:11.exe has stopped working (Code Blocks)11.exe 已停止工作(代码块)
【发布时间】:2015-03-31 09:10:56
【问题描述】:

这是一个查找方阵轨迹的简单程序,但是每当我尝试运行代码错误时,就会弹出“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;
}

【问题讨论】:

  • 使用调试器。设置断点。
  • ...或者只花 30 秒查看您自己的代码。 int x; printf("%d", x); scanf("%d",&amp;x); // read 5 from user 之类的代码不会打印值 5,而是打印垃圾或崩溃和烧毁,因为代码行是按照您键入它们的顺序执行的......

标签: c


【解决方案1】:

在您的代码中

a[n][n]

调用undefined behaviour。正如您使用过n's。值未初始化。这肯定不是你使用VLA 的方式。

供参考,来自C11标准文档

第 1 点。6.7.9,第 10 段,

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

....[int nn 的情况没有显式初始化]

第 2 点。

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

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

....[a[n][n],的案例]

解决方案:

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

【讨论】:

    【解决方案2】:
     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

    已经解释了您的问题的原因

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-01-20
      • 2013-08-09
      • 1970-01-01
      • 2014-04-15
      • 1970-01-01
      • 2011-10-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多