2012-12-11 40 views
0

我遇到了一個問題,我嘗試在鏈表上使用while循環。 我有兩個鏈表,分別爲temp和。我正在使用while循環來執行任務while(temp != NULL)。要繼續在每個循環中,我將分配temp = temp->link。但是,這段代碼不能編譯。我意識到遞歸函數可能是一個解決方案,但函數實際上更復雜,我不認爲遞歸會是一個好主意。順便說一句,已經是一個建立鏈接列表。提前致謝!C使用while循環鏈表

P.S.這是作業的一部分。

temp = graph->link; 
while(temp!=NULL){ 
    if(stack->link == NULL){ 
     stack->link = (node_pointer)malloc(sizeof(graph)); 
     stack->link->weight = temp->weight; 
     stack->link->vertex = temp->vertex; 
    } 
    temp = temp->link; //Here is the problem. 
} 

編輯:

堆棧和圖表是鏈表的兩個陣列:

typedef struct node *node_pointer; 

struct node{ 
    int vertex; 
    int weight; 
    int visited; 
    struct node *link; 
}; 
node_pointer graph[50]; 
node_pointer stack[50]; 
node_pointer temp; 
+0

什麼是錯誤信息? –

+0

您能否至少向我們展示temp,stack和graph的定義。如果你添加編譯器錯誤,它會有所幫助。 – dwalter

+0

'但是,這段代碼不能編譯。 「我不明白這個說法。你沒有任何的麻煩問題。 – banuj

回答

1

0xC00000005不是編譯時間錯誤。當您訪問不允許的內存位置時,通常會發生此錯誤,即使它指向NULL。它是一個運行時錯誤。檢查temp是否不爲NULL,並且也正確地編輯malloc。是嗎?同時檢查所有其他變量。使用調試器,通過valgrind運行它。它將幫助你正確地學習語言和調試技術。特別是CompileTime和RuntimeErrors ;-)。

當創建新節點時,還明確地將link設置爲NULL。指針變量通常包含一個沒有初始化的JUNK值。我假設你沒有設置linkNULL並訪問JUNK內存位置。垃圾進垃圾出。如果LINK爲非空垃圾,則您的邏輯IF TEMP(WHICH IS SET TO LINK) IS NOT EQUAL TO NULL失敗。

+0

沒有投票,沒有討論,沒有評論。然而,選擇的答案。我的生活中的最佳日子:-P - 謝謝@meany –

+0

我確實有鏈接作爲NULL爲初始化哈哈謝謝你的建議! – meany