附加链接列表时出现分段错误

时间:2016-01-03 04:35:32

标签: c segmentation-fault singly-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();
            }
    }

1 个答案:

答案 0 :(得分:0)

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

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

由于head指向NULL,然后您指向head right,所以基本上right->next取消引用指向NULL的指针}。这就是为什么你可能会遇到一个段错误的原因。

此外,您还要将内存分配给right,并在使其指向head导致内存泄漏(避免此类内容)后对其进行松散引用。

通过right -

分配内存后指向head可以避免这种情况
head=right;