2015-03-31 139 views
1

這是一個簡單的程序來查找矩形矩陣的痕跡,但每當我嘗試運行代碼錯誤彈出「11.exe已停止工作」。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

使用調試解釋。設置斷點。 – DrKoch 2015-03-31 09:16:30

+0

......或者花30秒鐘看看你自己的代碼。代碼像'int x; printf(「%d」,x); scanf(「%d」,&x); //從用戶讀取5將不打印值5,而是打印垃圾或崩潰和燒傷,因爲代碼行按您輸入的順序執行... – Lundin 2015-03-31 09:44:42

回答

4

在你的代碼

a[n][n] 

調用undefined behaviour。因爲你已經使用n的。值未初始化。這當然不是你如何使用VLA

作爲參考,從C11標準文檔

點16.7.9,第10段,

如果具有自動存儲持續時間的對象沒有被明確初始化,它的值是不確定的 。

.... [該情況下int nn未明確初始化]

,並從附件J

點2.

,章J.2,未定義行爲的原因,

具有自動存儲持續時間的對象的值被使用,而它不確定爲 。

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

解決方案:

你需要移動的a定義您已成功掃描的值之後n

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