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循环检查空指针有关,我应该知道?
编辑:没关系无限循环是固定的。非常感谢!
答案 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;
}
条件没有意义;只需删除它们并无条件地完成任务。