附加链表时出现分段错误
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;
我试图在链表的末尾追加一个节点,但出现分段错误。我无法弄清楚我的错误在哪里。任何帮助和建议将不胜感激!
#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;