2013-04-11 31 views
0

我正在尝试编写一个函数,该函数用一个由邻接列表表示的图进行一些计算,但是我得到了一个我只是没有得到的分段错误错误。 基本上我首先“移除”一个节点,然后重新插入一次。 这里是我的代码:adjecency list函数中的分段错误错误

int AdjList::bruteForce (node** list) { 
    int pointerIndex; 
    node* help; 
    node* help2; 

    for (int i=0; i<boundary; i++) { 
     huidigScore = 0; 
     help2 = list[i]; 
     help = help2; 
     help2 = help2->next; 
     while (help2->next != NULL) { 
      help->next = help2->next; 
      help2->next = NULL; 
      pointerIndex = help2->number; 

      help2->next = help->next; 
      help->next = help2; 
      help2 = help2->next; 

     } 
    } 
} 

和列表初始化:

node** list; 
node* help; 
node* help2; 
list = new node*[boundary]; 
for (int i=0; i<boundary; i++) { 
    list[i] = new node; 
    help = list[i]; 
    help->next = NULL; 
    help->number = 0; 
} 

在此先感谢。

+0

一个最小的完整例子会很好。 – Beta 2013-04-11 16:49:13

回答

2

在您初始化帮助 - >未来总是被设置为空,当谈到从而

help2 = help2->next; 
while (help2->next != NULL) { 

帮助2为NULL,并尝试访问help2->接下来在while循环导致段错误。
编辑
同样的事情发生在for循环的最后一次迭代时,当我等于边界1时,help2将保存指向列表中最后一个值的指针,其中help2-> next为NULL,并且所有内容都将由先前描述的场景。通过我在这里再次猜测列表中最后一个条目的下一个设置为NULL。

+0

那么,初始化后我加载了一些值,所以我不认为这是问题。如果我只是使用help-> next两次或三次,它不会给我任何错误,但如果我使用while循环,它会... – user2180680 2013-04-12 10:43:06

+0

然后提供初始化代码可能会有所帮助。或者更好的例子来说明如何重现问题。没有办法猜测代码中哪些人无法访问哪里出错。 – alexrider 2013-04-12 11:21:01

+0

我发现了错误,你说得对。我添加了一个if语句来检查help2-> next是否可行,现在编译。谢谢。 – user2180680 2013-04-12 13:20:13