双重循环链接列表导致无限循环

时间:2014-10-15 19:36:49

标签: c while-loop linked-list infinite-loop

Subscription *current_sub;
current_sub = sub_user->subscriptions;
while (current_sub != NULL){
    Event *sub_events;
    sub_events = current_sub->calendar->events;
    while (sub_events != NULL){
        add_event(ordered_events, od, sub_events->description, sub_events->time);
        printf("added! \n");
        if(sub_events ->next != NULL){
        sub_events = sub_events->next;
        }
    }
    if (current_sub->next != NULL) {
        current_sub = current_sub->next;
    }
}

所以我的循环由于某种原因无限循环,我无法弄清楚为什么。 两者都检查为null,我的链表应该都在某个时刻终止。 有没有什么与double while循环检查空指针有关,我应该知道?

编辑:没关系无限循环是固定的。非常感谢!

2 个答案:

答案 0 :(得分:1)

您正在检查此情况

while (current_sub != NULL)

然后使用if条件,确保只有current_sub->next != NULL然后增加current_sub

if (current_sub->next != NULL)

因此,当current_sub指向next时,next永远不会增加到NULL

内部while (sub_events != NULL)if(sub_events ->next != NULL)

的情况也是如此

答案 1 :(得分:0)

if(sub_events ->next != NULL){
    sub_events = sub_events->next;
}

如果sub_events ->next为NULL,则sub_events不会更改,因此下一次迭代将使用相同的值,无限制。

相同
if (current_sub->next != NULL) {
    current_sub = current_sub->next;
}

条件没有意义;只需删除它们并无条件地完成任务。