2012-03-20 80 views
0

上下文是L鏈接列表中的一個。我假設開頭的L不是0,並且每個鏈表都以一個具有NULL的節點作爲下一個字段結束。我不斷收到while(current->next)的BAD_ACCESS警告。怎麼了?我正在訪問一個正確的節點,因爲測試(!current->next)失敗。那麼,怎麼了?這個鏈表功能有什麼問題?

鏈表我的測試是

node* n = new node('a',new node('b', new node('a', new node('c', new node('a', 0))))); 

這種結構:

struct node { 
    char info; 
    node* next; 
    node(char a = 0, nodo* b = 0) { 
     info = a; 
     next = b; 
    } 
}; 
+1

我看到一些'node's和一些'nodo's?你能否複製你的實際代碼? – 2012-03-20 20:49:39

+0

@BrendanLong,修復。 「nodo」是意大利語中的「節點」。爲了更好的理解,我只是翻譯了它。 – Shoe 2012-03-20 20:50:26

+0

適用於我:http://codepad.org/TzzkiniO我的猜測是代碼中有東西沒有向我們展示(比如main()函數)。 – 2012-03-20 21:10:53

回答

5

如果current->next->next == very_next = NULL,就不會得到電流分配NULL爲好,從而對當前的以後訪問(通過current->next)無效(current = current->next = very_next)?

+0

這實際上是真正的問題。他是對的。如果current-> next變爲NULL,那麼在while current = current-> next的末尾可以爲0. – Shoe 2012-03-20 21:10:54

+0

我認爲,如果在刪除之後設置current = current-> next,則跳過該節點迭代。 – 2012-03-20 21:53:01

3

你是電流 - >下一步 - >下一個指向下一個元素的循環中假設可能是錯的,你應該先檢查一下,如果這是真的。

+0

如果current-> next是!= 0那麼current-> next肯定有一個info域。另外如果current-> next是!= 0,它肯定有current-> next-> next(也可能是0)。 – Shoe 2012-03-20 20:51:38

+0

對不起,我試圖回覆piokuc。我同意這不是問題。 – 2012-03-20 20:55:38

+0

@BrendanLong,在本練習的上下文中,每個節點都有一個正確的節點 - >下一個或一個空的(0/NULL)節點 - >下一個字段,它仍然正確,但只是空的(它不包含下一個也沒有信息)。 – Shoe 2012-03-20 20:56:31