2016-06-28 62 views
-1

我有在C.說2D陣列我的二維陣列的一個問題是board[d][d]d=7),我想的board[d-1][d-2]值賦給int 。當我這樣做,我得到錯誤,如果我printf board[d-1][d-2]我得到32766。數組中的最高值是d*d-1=48。 我在做什麼錯?如何訪問二維陣列值和assing值與INT用C

int main(void) 
{ 
    int d=7; 
    int nr=(d*d)-1; 
    int board[d][d]; 
    int u=board[d-1][d-2]; 
    bool even=false; 
    if ((d/2)*2!=d) 
    { 
     even=true; 
    } 
    printf("%d\n", even); 

    printf("%i\n", board[d-1][d-2]); //result here is 32764? 

    for(int i=0;i<d;i++) 
    { 
     for(int j=0;j<d;j++) 
     { 
     board[i][j]=nr; 
     nr--; 
     printf(" %2d", board[i][j]); 
     } 
     printf("\n"); 
    } 
    return 0; 
} 

回答

0

這是因爲你沒有使用任何值初始化它,所以它只是存儲在內存atm中發生的任何垃圾。 您需要在船上運行併爲其設置初始值。

+0

我把以後的詮釋ü for循環,所以現在它的初始化,謝謝你的幫助。 – lkoks

+0

@lkoks upvote答案接受是stackoverflow方式說謝謝:)祝你好運在你的編碼努力! –

+0

什麼是內存垃圾? – 2501

0

當您創建board數組時,它不是initalised - 您會在裏面得到垃圾數值。一個好的做法是使用初始化之前,陣列

int board[d][d] = {0}; 

如果你在那裏你填入值的數組在循環後移動printf,你會得到預期的結果

+0

嘗試初始化它時出錯;「錯誤:可變大小的對象可能未初始化」。 – lkoks

+0

@lkoks使用'const int d = 7'或memset(board,0,d * d * sizeof(int))'將其歸零。 – buld0zzr

+0

我把int u放在for循環之後,所以現在初始化了,謝謝你的幫助。 – lkoks