2012-03-20 83 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