2015-12-09 58 views
0

我想malloc的三維數組,然後初始化,如下所示,問題是,我得到一個警告,說我想「解引用一個未定義的指針值」在下面一行:Parque->matriz[i][j][p]='@';取消引用未定義的指針值?

任何幫助將不勝感激。

我的代碼如下:

parque *Parque; 
Parque = (parque *) malloc(sizeof(parque)); 


Parque->matriz = (char***)malloc(x * sizeof(char **)); 


    for (i = 0; i < x; i++) 
    { 
     Parque->matriz[i] = (char**)malloc(y * sizeof(char*)); 

     for (j = 0; j < y; j++) 
     { 
      Parque->matriz[i][j] = (char*)malloc(z*sizeof(char)); 

     } 
    } 

    for (p=0; p<z; p++) 
    { 
     for (j=y-1;j>=0; j--) 
     { 
      for (i=0; i<x; i++) 
      { 
       Parque->matriz[i][j][p]='@'; 

      } 
     } 
    } 

,這是結構公園的定義:

struct _parque{ 
    int dimx; 
    int dimy; 
    int pisos; 
    int entradas; 
    int acessos; 
    int nodes; 
    char ***matriz; 
    int capacidade; 
    int lugares_ocupados; 
}; 

typedef struct _parque parque; 
+0

什麼分配給'Parque'? – dasblinkenlight

+0

我認爲Parque是一種結構,但我希望看到第一個的定義。 – arduic

+0

哦,對不起,我忘了發佈它的定義。 @dasblinkenlight –

回答

0

您的代碼似乎是正確的,但你必須遍歷指數的一種有趣的方式。也許你的編譯器感到困惑。請嘗試:

for (i = 0; i < x; i++) 
{ 
    Parque->matriz[i] = (char**)malloc(y * sizeof(char*)); 

    for (j = 0; j < y; j++) 
    { 
     Parque->matriz[i][j] = (char*)malloc(z*sizeof(char)); 

     for (p = 0; p < z; p++) 
     { 
      Parque->matriz[i][j][p]='@'; 

     } 

    } 
} 

這將在語義上等同於您的第二套嵌套循環。

+0

這工作,謝謝。 –