0

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

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;
}

提前致谢。

4

1 回答 1

2

在你的初始化 help->next 中总是设置为 null,因此当涉及到

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

help 2 为 NULL 并尝试在 while 循环中访问 help2->next 会导致段错误。
编辑
for 循环的最后一次迭代也发生了同样的事情,当 i 等于边界 1 时,help2 将保存指向列表中最后一个值的指针,help2->next 为 NULL,一切都将按照前面描述的场景进行。通过我在这里再次猜测列表中的最后一个条目将下一个设置为NULL。

于 2013-04-11T16:51:04.250 回答