2016-07-24 95 views
0

我想在结构体中有一个数组,它将存储相同数据类型的指针(即struct map)。我看着#2,发现这个:无法将指针数组声明为struct struct C

struct map { 
    int city; 
    struct map **link = (struct map *)malloc(204800 * sizeof(struct map *)); 
} 

但我收到此错误: -

error: expected ':', ',', ';', '}' or '__attribute__' before '=' token  
    struct map **link = (struct map *)malloc(204800*sizeof(struct map *)); 
+0

malloc的结果不应该被铸造:http://stackoverflow.com/questions/605845/do-i-cast-the-result-of-malloc#605858 – SurvivalMachine

+0

你到底想要达到什么目的? –

回答

5

这是一个结构的定义,你不能的malloc或使用声明中的任何功能,因为声明没有被执行,它只是一种关于'map'类型的结构应该是什么样子的模板,这样编译器会知道当我们创建它的一个实例时应该为struct map分配多少内存。当你想要在结构图中使用成员时(例如,使指针链接指向某个可行的内存段),你需要在某处创建一个'map'实例,只有这样你才能够调用malloc和使链接点指向最终的内存段。

解决这个问题,首先声明,像这样的结构方式:

struct map{ 
int city; 
struct map **link; 
}; 

,当你创建主要的结构的实例,可以为链接分配空间,像这样:

int main() 
{ 
    struct map *temp = malloc(sizeof(struct map)); 
    temp->link = malloc(204800*sizeof(struct map *)); 
    return 0; 
}