我的输入程序在双链表中终止,错误代码为 -1073741819 (0xC0000005)

my input program, in double linked list terminates with error code -1073741819 (0xC0000005)

这是我在双链表中输入数据的函数

void input(int element){
struct node *p=head,*q=(struct node *)malloc(sizeof(struct node));
if(p==NULL){
    head=q;
    q->data=element;
    q->prev=NULL;
    q->next=NULL;
}
else{
    while(p->next!=NULL){
        p=p->next;
    }
    p->next=q;
    q->prev=p;
    q->next=NULL;
    q->data=element;
}}

这是我在双链表中显示数据的函数

void display(){
struct node *p=head;
while(p!=NULL){
    p=p->next;
    printf("%d   ",p->data);
}
printf("\n");}

如果我向我的双链表输入一个或多个数据并尝试显示我的链表,程序将终止,错误代码为 -1073741819 (0xC0000005)

如果我输入 1,2,3,4 到我的链表 输出是:

2 3 4 进程已完成,退出代码为 -1073741819 (0xC0000005)

这里是我程序的完整代码:

struct node {
int data;
struct node *next;
struct node *prev;
}*head=NULL;
void display(){
struct node *p=head;
while(p!=NULL){
    p=p->next;
    printf("%d   ",p->data);
}
printf("\n");
}
void input(int element){
struct node *p=head,*q=(struct node *)malloc(sizeof(struct node));
if(p==NULL){
    head=q;
    q->data=element;
    q->prev=NULL;
    q->next=NULL;
}
else{
    while(p->next!=NULL){
        p=p->next;
    }
    p->next=q;
    q->prev=p;
    q->next=NULL;
    q->data=element;
}
}
int main() {
int x;
while(1){
    printf("Press   1.INSERT   4.DISPLAY ALL ELEMENTS   5.QUIT   \n");
    scanf("%d",&x);
    if(x==1){
        int element;
        printf("\n write your element");
        scanf("%d",&element);
        input(element);
    }

    else if(x==4){
        display();
    }
    else if (x==5){
        return 0;
    }

}
}

由于两个语句的顺序不正确,函数显示存在错误。

而不是

void display(){
struct node *p=head;
while(p!=NULL){
    p=p->next;
    printf("%d   ",p->data);
}
printf("\n");}

它至少应该看起来像

void display(){
struct node *p=head;
while(p!=NULL){
    printf("%d   ",p->data);
    p=p->next;
}
printf("\n");}