2014-06-22 73 views
0
struct Level_Info 
{ 
    char **Map; 
} Level[Level_Amount]; 

for (int Cnt_1 = 0; Cnt_1 < Level_Amount; Cnt_1++) 
{ 
    Level[Cnt_1].Map = malloc(Rbn_Col * sizeof(char*)); 
    for (int Cnt_2 = 0; Cnt_2 < Rbn_Col; Cnt_2++) 
    Level[Cnt_1].*(Map+Cnt_2) = malloc(Rbn_Row * sizeof(char)); /* line 10 */ 
} 

GCC說:expected identifier before 「*」 token在第10行,所以如何解決它?無法在結構中創建模擬的2D動態數組

+1

片段不帶行號更容易爲一個wantin複製/頸部你的代碼,將其提供給一個編譯器。 – alk

回答

4

更換

Level[Cnt_1].*(Map+Cnt_2) = malloc(Rbn_Row * sizeof(char)); 

*(Level[Cnt_1].Map+Cnt_2) = malloc(Rbn_Row * sizeof(char)); 

或者乾脆

Level[Cnt_1].Map[Cnt_2] = malloc(Rbn_Row * sizeof(char)); 

由於sizeof(char)通過確定指標始終是1,你也可以做

Level[Cnt_1].Map[Cnt_2] = malloc(Rbn_Row); 

還是留靈活的什麼Map點方面做

Level[Cnt_1].Map[Cnt_2] = malloc(Rbn_Row * sizeof(Level[Cnt_1].Map[Cnt_2][0])); 

另外請注意,首選類型數組索引是size_t,不int

所以你的代碼段應該是這樣的:

struct Level_Info 
{ 
    char ** Map; 
} Level[Level_Amount]; 

for (size_t Cnt_1 = 0; Cnt_1 < Level_Amount; ++Cnt_1) 
{ 
    Level[Cnt_1].Map = malloc(Rbn_Col * sizeof(Level[Cnt_1].Map[0])); 

    for (size_t Cnt_2 = 0; Cnt_2 < Rbn_Col; ++Cnt_2) 
    { 
    Level[Cnt_1].Map[Cnt_2] = malloc(Rbn_Row * sizeof(Level[Cnt_1].Map[Cnt_2][0])); 
    } 
} 
+0

完美。謝謝。 :-) –