建立一个单链表函数,在编译的时候没有错误,在运行的时候出现 段错误
在linux环境下编译的,想知道是哪里出错了呀?
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
/*定义链表结构内容*/
struct list
{
char name[10];
long int number;
struct list *next;
};
/*创建链表插入函数,*/
void insert(struct list *head)
{
int n=1;
struct list *p1,*p2;
p1->next = NULL;
p1=p2=(struct list*)malloc(sizeof(struct list));
printf("please input the %d th name : number : \n",n++);
scanf("%s%ld",p1->name,&p1->number);
/*p1指向新分配的malloc()起始地址,若新分配的p1里面有内容,p2=p1,继续新建结点;若没有=内容则结束新建结点*/
while((p1->number)>0)
{
if(head ==NULL) head = p2;
else p2->next=p1;
p2= p1;
p1=(struct list*)malloc(sizeof(struct list));
printf("please input the %dth name : number : \n",n++);
scanf("%s%ld",p1->name,&p1->number);
p1->next = NULL;
}
free(p1); /*释放没有内容的新结点*/
}
/*輸出链表中的内容*/
void putout(struct list *head)
{
while(head!=NULL)
{
printf("name:%s\t number:%ld\n",head->name,head->number);
head = head->next;
}
}
int main()
{
struct list *head;
head=NULL;
insert(head);
putout(head);
return 0;
}