2014-06-22 46 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

完美。谢谢。 :-) –