这是一个简单的程序来查找方形矩阵的痕迹,但每当我尝试运行代码时,弹出“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;
}
答案 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
解释