附加链表时出现分段错误

segmentation fault while appending a linked-list

我试图在链表的末尾追加一个节点,但出现分段错误。我无法弄清楚我的错误在哪里。任何帮助和建议将不胜感激!

#include<stdio.h>
#include<stdlib.h>

struct node{
            int data;
            struct node *next;
    }*head;
    void append(int x)
    {
            struct node *temp1,*right;
            temp1=malloc(sizeof(struct node));
            temp1->data=x;
            right=malloc(sizeof(struct node));
            right=head;
            while(right->next != NULL )
            right=right->next;
            right->next=temp1;
            right=temp1;
            right->next=NULL;
    }                                                                             
    void print(){
            struct node *temp=head;
            printf("List is: ");
            while( temp!=NULL )
            {
                    printf(" %d",temp->data);
                    temp=temp->next;
            }
            printf("\n");
    }

    int main(){
            struct node *temp;
            int n,i,x;
            head=NULL;//empty list;

            printf("how many numbers?\n");
            scanf("%d",&n);

            for(i=0;i<n;i++){
                    printf("\nEnter the number\n");
                    scanf("%d",&x)
                    append(x);
                    print();
            }
    }

在您的函数 append 中,您取消引用指向 NULL-

的指针
right=malloc(sizeof(struct node));
right=head;
while(right->next != NULL )
....

因为 head 指向 NULL 然后你通过 right 指向 head ,所以基本上通过 right->next 你取消引用指向 NULL。这就是为什么你可能会遇到 seg fault 。

并且您还为 right 分配内存并在指向 head 后松散引用它导致内存泄漏(避免此类事情)。

这可以通过head -

分配内存后指向right来避免
head=right;