C、链表中的分割错误



我对下面的函数有问题,当(*ptr)为 NULL 而不是结束 while 循环时,函数崩溃。我尝试使用if((*ptr)->next==NULL) break;但无论如何都失败了。

boolean search_times(struct list ** ptr, float *V, int n, struct list_times ** new ){
struct list * tmp_ptr=NULL;
if( V!=NULL && n>=0 ) {
while((*ptr)!=NULL) {
int times=0;
for (int i = 0; i < n; i++) {
if (isequal((*ptr)->value, V[i]))
times++;
}
if((suf_insert_times(new, (*ptr)->value, times))==FALSE)
return FALSE;
tmp_ptr=*ptr;
ptr=&(*ptr)->next;
free(tmp_ptr);
}
return TRUE;
}
else
return FALSE;
}

>ptr=&(*ptr)->next;保存指向对象成员next的指针,该指针在下一行中释放。尝试在下一次迭代中取消引用ptr将导致未定义的行为。

*ptr = (*ptr)->next;应该是正确的。这会将列表推进到下一项,而上一项将在下一行中释放。

相关内容

  • 没有找到相关文章

最新更新