按增序初始化链表当中while循环出错

在写合并链表的时候遇到一个while循环把条件换一下就会出错
在while(current && u->e>current->e )这个语句中把&&两边的条件换一下子就会报错提醒thread 1 received segmentation fault,SIGSEGV
#include
#include

typedef struct list{
    double var;
    int e;
    struct list *next;
}list;

/*按增序初始化链表*/
void initial_list(list *head){
    list *u=(list*)malloc(sizeof(list));
    list *pc;
    list *current;
    pc=head;
    current=head->next;
//    printf("%p",current);
    printf("输入系数:");
    scanf("%lf",&u->var);
    printf("输入指数:");
    scanf("%d",&u->e);
    u->next=NULL;
    while(current && u->e>current->e ){
        pc=current;
        current=current->next;
    }
    pc->next=u;
    u->next=current;
}
/*合并链表,这个没错不用看*/
void insert_list(list *la,list *lb){
    list *pc=la,*pa=la->next,*pb=lb->next;
    list *temp1,*temp2;
    while(pa && pb){
        if(pa->e > pb->e){
            pc->next=pb;
            pc=pb;
            pb=pb->next;
        }
        else if(pa->e==pb->e){
            if(pa->var+pb->var==0){
                temp1=pb;temp2=pa;free(temp1);free(temp2);
                pb=pb->next; pa=pa->next;
            }
            else{
                pa->var+=pb->var;
                pc->next=pa;
                pc=pa;
                pa=pa->next;
                pb=pb->next;
            }
        }else{
            pc->next=pa;
            pc=pa;
            pa=pa->next;
        }
    }
    pc->next=pa ? pa:pb;
    free(lb);
}
/*打印链表*/
void show_list(list *la){
    la=la->next;
    while(la){
        printf("+(%.1f)x^%d",la->var,la->e);
        la=la->next;
    }
    printf("\n");
}
/*释放内存空间*/
void free_list(list *la){
    list *temp;
    while(la){
        temp=la->next;
        free(la);
        la=temp;
    }
}

int main()
{
    list *la=(list *)malloc(sizeof(list));
    list *lb=(list *)malloc(sizeof(list));
    int i=0;
    int sum;
    la->next=NULL;
    lb->next=NULL;
    printf("输入la有几项:"); scanf("%d",&sum);
    for(;i"输入lb有几项:"); scanf("%d",&sum);
    for(i=0;i0;
    
    free_list(la);
}



设置断点调试的时候就是在initial_list函数中的while语句while(current && u->e>current->e )交换&&两边条件就会报错
我怀疑是不是没有分配给u空间于是还初始化了一下添加了u->e=0;但是没用
我想要达到的结果,如果你需要快速回答,请尝试 “付费悬赏”

见下面说明
如果 交换的话,会先访问 current->e, 如果这个时候current是null空的,会出现地址非法访问

 //while(current && u->e>current->e ){ //这句话是先判断current是否为null,如果不为null才能访问e
   while(u->e>current->e && current  ){//这句话是先访问current的e,如果为null,会出现地址非法访问
        pc=current;
        current=current->next;
    }

望采纳!!!点击回答右侧采纳即可采纳!!

这是因为在该语句中,你使用了两个变量:current和u->e。

如果在这个循环中,current变量是空指针或者u->e变量是一个非法值,就会发生段错误。这就是为什么你把条件换一下子就会报错的原因。

你可以尝试检查current变量和u->e变量的值,确保它们都有效。例如,你可以在循环开始前检查current是否是空指针,并在循环体内部检查u->e是否是一个有效的指数。