我的程序的目标是删除所有具有数值偶数值的元素。该程序工作正常,除非它应该删除最后一个元素:这会导致程序崩溃。
我创建了一个具有以下结构的列表:
struct elemento{
int dato;
struct elemento *next;
};
您可以忽略列表的创建方式,因为我知道错误仅在此函数中:
struct elemento *eliminapari(struct elemento *p){
struct elemento * start = p;
struct elemento * temp, *temp2;
int cont;
cont = 0;
temp2 = p;
while(p != NULL && cont != 20){
temp2 = temp2->next;
if((p->dato % 2) == 0){
if (cont == 0){ //if first element
start = p->next;
free(p);
p = start;
}else if(p->next == NULL){ //if last element
temp2->next = NULL; //this would be the previous node
free(p);
p = NULL;
}else{
temp = p->next;
p->dato = p->next->dato;
p->next = p->next->next;
free(temp);
}
}else{printf("\n3\n"); p = p->next;}
cont = cont + 1;
}
return(start);
}
感谢。
答案 0 :(得分:2)
如果你调用eliminapari将p传递为唯一的结构实例(换句话说,p-> next为NULL),那么将会发生什么。然后while循环中的第一行设置temp2 == NULL。但是您试图取消引用temp2的其他"子句(temp2-> next = NULL),但temp2为NULL,因此崩溃。