2011-08-15 50 views
-3
#include`<stdio.h>` 
#include`<stdlib.h>` 
int main() 
{ 
    int k, i, j,tot=0, htot=0, vtot=0, dtot=0, m, n;   
    int a[8][8] = { 
    {0,0,0,0,0,0,1,0}, 
    {0,0,0,1,0,0,0,0}, 
    {0,1,0,0,0,0,0,0}, 
    {1,0,0,0,0,0,0,0}, 
    {0,0,1,0,0,0,0,0}, 
    {0,0,0,0,0,1,0,0}, 
    {0,0,0,0,1,0,0,0}, 
    {0,0,0,0,0,0,0,1}, 
}; 

for(i=0;i<8;i++)   
{ 
    htot=0; 
    printf("\n"); 
    for(j=0;j<8;j++) 
    { 
     htot += a[i][j]; 
     printf("%d\t", a[i][j]);  
    }  
    tot += htot ; 
} 

if(tot == 8) 
printf("Moving on to Vertical checking"); 
else 
printf("Horizontal criterion not fulfilled %d ", tot); 
tot=0; 
for(j=0;j<8;j++) 
{ 
    vtot=0; 
    printf("\n"); 
    for(i=0;i<8;i++) 
    { 
     vtot += a[i][j]; 
     printf("%d\t", a[i][j]); 
    } 
    tot +=vtot; 
} 
if(tot == 8) 
printf("Moving on to Diagonal checking"); 
else 
printf("Vertical criterion not fulfilled %d ", tot);  

for(i=0;i<8;i++) 
{ 
    for(j=0;j<8;j++) 
    { 
    if(a[i][j]) 
    { 
     m=i; 
     n=j; 
     while(n!=0)// running the loop leftwards 
     { 
     m++; 
     n--; 
     dtot +=a[m][n];  
     } 
     printf("diagonal left total = %d", dtot); 
     if(dtot == 1) 
     { 
     m=i; 
     n=j;    
     while(n!=0)// running the loop rightwards 
     { 
     m++; 
     n++; 
     dtot +=a[m][n]; 
     } 
     printf("diagonal right total = %d", dtot); 
    } 
} 
} 
} 
return 0; 
} 
+1

要做的最好的事情就是通過像gdb這樣的調試器來運行它,並告訴我們發生分段錯誤的確切行。 – GWW

+1

它在哪裏段錯?你的調試器告訴你什麼?這甚至應該做什麼? – Mat

+1

請縮進您的代碼,以便它可以真正被讀取。 – zellio

回答

1
while(n!=0)// running the loop rightwards 
{ 
    m++; 
    n++; 
    dtot +=a[m][n]; 
} 

這似乎是一個非常明顯的崩潰對我來說。增加n並檢查n!=0

之前的循環可能也會崩潰,因爲m用盡了數組索引。

在這些循環中放置一些printfmn。更好的是:在編寫代碼之前考慮數組索引範圍。

+0

是的,我在這件事上發現了我的錯誤。謝謝 :) –

1

對角線運行未正確界定。你只是檢查n索引,並且你在右邊的範圍檢查它是錯誤的方向。在某個點n超出範圍並執行非法數組訪問。