,C,尝试删除列表中的最后一个元素时崩溃

时间:2015-06-03 21:18:41

标签: c list crash free

我的程序的目标是删除所有具有数值偶数值的元素。该程序工作正常,除非它应该删除最后一个元素:这会导致程序崩溃。

我创建了一个具有以下结构的列表:

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);

   }

感谢。

1 个答案:

答案 0 :(得分:2)

如果你调用eliminapari将p传递为唯一的结构实例(换句话说,p-> next为NULL),那么将会发生什么。然后while循环中的第一行设置temp2 == NULL。但是您试图取消引用temp2的其他"子句(temp2-> next = NULL),但temp2为NULL,因此崩溃