我对下面的函数有问题,当(*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;
应该是正确的。这会将列表推进到下一项,而上一项将在下一行中释放。