我试图在链表的末尾附加一个节点,我收到了一个分段错误。我无法弄清楚我的错误在哪里。任何帮助和建议将不胜感激!
#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();
}
}
答案 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;