2014-02-08 29 views
0

我在第4行發現這個錯誤,說'無效初始值設定項'。我知道錯誤意味着什麼,但我無法弄清楚爲什麼我會收到錯誤。我嘗試過各種指針和值的組合,但似乎並不想工作。任何幫助/代碼反饋將不勝感激。使用Malloc並分配給函數之間的數組

注:我打算爲棋盤有一個二維數組,這意味着64位內存malloc'd。 printf是爲了讓編譯器保持高興,並告訴我在[4] [2]中是否有'0'。

int *newBoard();  
int main(int argc, char *argv[]) { 

    int *chessBoard[7][7] = *newBoard(); 
    printf ("%d", chessBoard[4][2]); 

    return EXIT_SUCCESS; 
} 

int *newBoard() { 

    int counter = 0; 
    int *blankBoard = malloc(sizeof((int) * TOTALSPACES)); 

    while (counter < TOTALSPACES) { 
     blankBoard[counter] = VACANT; 
     counter++; 
    } 

    return blankBoard; 
} 

回答

1

newBoard返回TOTALSPACES整數的數組。 int *chessBoard[7][7] = *newBoard(); LHS是一個7x7的int指針數組(非int)。 RHS是什麼,由該調用返回的int指針的內容? (你怎麼認爲*盈調用newBoard()的是幹什麼的?

要麼int *newBoard = newBoard();(使用堆內存)或int newBoard[7][7];(使用堆棧內存)會的工作。你正在嘗試做的各佔一半!

0

int *chessBoard[7][7]代表的2D陣列(7 * 7),每個元素類型是int*; 但*newBoard()支架爲int元件

0
#include <stdio.h> 
#include <stdlib.h> 

#define TOTALSPACES 8*8 
#define VACANT '0' 

void *newBoard(); 

int main(int argc, char *argv[]) { 

    int (*chessBoard)[8][8] = newBoard(); 
    printf ("%d", (*chessBoard)[4][2]);//48 : '0' 

    return EXIT_SUCCESS; 
} 

void *newBoard() { 
    int *blankBoard = malloc(sizeof(int) * TOTALSPACES); 
    int counter = 0; 

    while (counter < TOTALSPACES) 
     blankBoard[counter++] = VACANT; 

    return blankBoard; 
}