2012-04-11 87 views
0

好吧,所以我試圖將二維數組的元素與字符串元素傳遞給結構中的二維數組。我做了一個代碼,但它收到一個運行時錯誤。我認爲在我試圖初始化board2 [i] [j]的代碼中存在一個問題。任何幫助表示讚賞。C編程 - 初始化一個結構二維數組

char ***board; 
    int i, j, size; 

    printf("Enter the size of array:"); 
    scanf("%d", &size); 

    if((board = (char***)malloc(sizeof(char**)*size))==NULL) 
    { 
     printf("Memory Allocation failed\n"); 
     return -1; 
    } 

    for(i=0; i<size; i++) 
    { 
     if((board[i] = (char**)malloc(sizeof(char*)*size))==NULL)  
     { 
      printf("Memory Allocation failed\n"); 
      return -1; 
     } 
     for(j=0; j<size; j++) 
     { 
      if((board[i][j] = (char *)malloc(sizeof(char)*4))==NULL) 
      { 
      printf("Memory Allocation failed\n"); 
      return -1; 
      } 
      a = rand() % 2; 
      b = rand() % 2; 
     if(a==0 && b==0) 
      strcpy(board[i][j], "ab"); 
     else if(a && b==0) 
      strcpy(board[i][j], "Ab"); 
     else if(a==0 && b==1) 
      strcpy(board[i][j], "aB"); 
     else 
      strcpy(board[i][j], "AB"); 
     } 

    struct data{ 
    const char *element; 
    int visited; 
    };  
    void board2_initialize(char ***board, int size) 
    { 
    struct data **board2; 


    for(i=0;i<size;i++) 
    { 
    for(j=0;j<size;j++) 
    { 
    board2[i][j].element = board[i][j]; 
    board2[i][j].visited = 0; 
    printf("%s", board2[i][j].element); 
    } 
    } 
    } 

編輯:忘了提,初始化發生在函數內部

+0

你不分配board2任何地方。所以確定,它會崩潰。你把你的代碼的一部分留下了嗎? – jv42 2012-04-11 14:09:43

+0

我試着以board1相同的方式分配board2,但它收到一個錯誤。 :/ – BluPixel 2012-04-11 14:12:15

+0

你永遠不會種子rand(),這意味着它的種子是1,這樣每次都會產生相同的模式,所以它不是隨機的。 – foo 2012-04-11 14:27:22

回答

3

你分配它用同樣的方法你做的board陣列:

struct data **board2 = malloc(sizeof(struct data *) * size); 

for(i = 0; i < size; i++) 
{ 
    board2[i] = malloc(sizeof(struct data) * size); 

    for(j = 0; j < size; j++) 
    { 
     /* ... */ 
    } 
} 
+0

抱歉,誤讀,恢復編輯。 – jv42 2012-04-11 14:15:28

+0

如果我嘗試在函數中初始化board2,這個工作會嗎?我嘗試過,但收到錯誤。 「void *無效轉換爲數據**」。 – BluPixel 2012-04-11 14:20:55

+0

等待nvm作品現在感謝:) – BluPixel 2012-04-11 14:27:09