2012-09-14 169 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定義的代碼,使人們有什麼建議最好應完成。