C语言编程链表做删除的时候 每当删除第一个数据的时候程序就会崩溃 求大神解决!

//删除节点

struct Student*delet(struct Student*head)
{
struct Student*p1,*p2,*p3;
p1=(struct Student*)malloc(LEN);
printf("请输入要删除的学号");
scanf("%d",&p1->num);
n=p1->num;
p2=head;
while(n!=p2->num&&p2->next!=NULL)
{
p3=p2;
p2=p2->next;
}
if(n==p2->num)
{
if(p2==head)
{
head=head->next;
free(p2);
}
else
{
p3->next=p2->next;
free(p2);
}
}
else
{
printf("\n");
printf("找不到删除数据");
printf("\n");
}
return(head);
}

这是删除节点的函数 如果需要的话我把整个程序粘过来

第1个回答  2013-06-21
程序崩溃一般系统会返回一个代表错误类型的整型数值,把崩溃时系统的返回数据发出来。
估计你是对空地址进行了写操作,在对指针中的地址进行操作前检查一下指针是否为空,包括函数的参数head也检查一下是否为空,某些情况下由于某些原因可能会出现这种情况
第2个回答  2013-06-21
作为参数传来的链表头,在函数运行过程中确实改变了,但不会影响调用者的值。

head = head -> next;

head的值变了,但是调用语句 delete(pMyHead);中的pMyHead的值并不改变。
将调用语句改成pMyHead = delete(pMyHead);可以解决问题。

C语言牵涉到内存与指针的部份是比较让人难以理解的本回答被提问者采纳
相似回答