2012-09-14 149 views
1

我有一个链表,我试图做一个临时数组来帮助我解决每个节点,而我建立其余的结构,然后我打算释放数组,但似乎我不能将结构的地址存储到指针数组中。C结构到结构指针数组编译错误

这里是我有问题,其中的归结版本:

vertex *vertexIndex = NULL; 
vertex *vertexHead = NULL; 
vertexHead = malloc(sizeof(vertex)); 
vertexHead->vertexNum = 5; 
vertexIndex = malloc(sizeof(vertex*)); 
vertexIndex[0] = vertexHead;   //<<<<<<<<<<< Error on this line 
printf("%u\n", (vertexHead[0])->vertexNum); 

main.c:72:19: error: incompatible types when assigning to type ‘vertex’ from type ‘struct vertex *’

任何帮助将不胜感激。

EDIT

下面是结构

struct edgeStruct { 
    unsigned int edgeTo; 
struct edgeStruct *nextEdge; 
}; 
typedef struct edgeStruct edge; 

struct vertexStruct { 
    unsigned int vertexNum; 
    edge *edgeHead; 
    struct vertexStruct *nextVertex; 
}; 
typedef struct vertexStruct vertex; 
+0

我们可以看到vertexHead和vertexIndex的声明? –

+0

怀疑问题是与'sizeof(vertex *)'?虽然你似乎通过生成一个指针来填充数组? ?! – Andrew

回答

1

vertexIndex应该是一个指针的指针,因为使用的是它作为一个指针数组。

vertex **vertexIndex = NULL; 
+0

这就是它!谢谢 –

1

vertexIndex不是结构数组。这只是一个结构指针,这就是为什么你得到错误。

如果你想要一个数组,声明一个数组:顶点

vertex *vertexHead[10]; //array of 10 pointers 

现在,你就可以作为你现在要做的使用它。

+0

我试图以这样的方式声明一个数组稍后我可以使用realloc。是“顶点\ * vertexIndex [10];”和“vertexIndex = malloc(sizeof(vertex \ *)* 10);”不等同? –

+0

@ user1671981首先分配在堆栈上,第二个分配在堆上。您可以根据您的需要使用任一种。堆栈分配的变量只在它们声明的范围内有效。 –

1

由于错误消息说,在该行上,您正试图将指针的内容分配给指针,即。分配vertexHead这是vertex **vertexIndex(相当于vertexIndex[0]这是不兼容的。

这将是更好的您发布的vertex定义的代码,使人们有什么建议最好应完成。