为什么会出现Segmentation Core dumped?我做了很多次链接列表,但不明白为什么这段代码中有一个转储

Why is there a Segmentation Core dumped? I have made linked lists many times but cannot understand why is there a dump in this code

我不明白为什么会有一个"Segmentation fault (core dumped)"...它发生在我在push函数中调用push函数的时候。

node* push(node* head, node*cur, int n)
{
    if(head==NULL)
    {
        head=(node*)malloc(sizeof(node));
        ins(n, head);
        head->next=NULL;        
    }
    else
    {
        cur->next=(node*)malloc(sizeof(node));      //because initially head and cur are same!      
        cur=cur->next;
        ins(n, cur);
        cur->next=NULL; 
    }
    printf("\nPress 1 to continue insertion: ");
    int ch; 
    scanf("%d", &ch);
    if(ch==1)
    {
        printf("\nEnter Digit to push: ");
        int dig;
        scanf("%d", &dig);
        push(head, cur, dig);
    }
    return head;
}


void disp(node* head)
{
    node* cur=head;

    printf("printing::: %d and %d and %p and %p\n", head->dat, cur->next->dat, head, cur);

    while(cur!=NULL)
    {
        printf("=>");
        cur=cur->next;
    }
}

[简答]
您正在尝试对空指针

执行 next 操作

[长答案]
罪魁祸首似乎是 cur 指针。 Access violation exceptionSegmentation fault 在访问无效内存时闪烁。在这里,似乎 cur 指针为空,并且 ->next 操作正在空指针上使用。

[解决方法]

if(head==NULL)
{
    head=(node*)malloc(sizeof(node));
    ins(n, head);
    head->next=NULL;  
    cur=head;   <---------- Add this
}

问题好像在行

cur->next=(node*)malloc(sizeof(node)); 因为正如您所说的 cur 与 head 相同,所以 cur 为 NULL 并且访问 next 为 NULL 是无效的。

要治愈这个

if(head==NULL)
    {
        head=(node*)malloc(sizeof(node));
        ins(n, head);
        head->next=NULL;  
        cur=head;   // <--change here
    }

以便下一次 cur 指向 head 并且您可以访问 cur 的 next。