回复 17楼 神龙赖了
刚刚还试了下,没问题,我释放pa1之前已经把pa1->next赋值给了pa2->next了,所以pa1就悬空了啊,我释放了没问题啊
程序代码:
if( pa1 != NULL) //两链表中学号相同
{
pa2->next = pa1->next;
free( pa1 );
printf("%d\n",pa1 ->next);
pa1 = pa1->next;
printf("%s\n",pa1 ->name);
}测试一下就知道了,free(pa1)后调用pa1 ->next出现的地址的值是一个负数,说明已经出错了在调整pa1指针后再输出pa1 ->name程序崩溃,说明pa1->next是一个错误的操作
但是这里的if()语句已经是最后的一个操作了,因为
程序代码: while(pb1!=NULL) //让b表中的每个结点和a表比较
{
pa1=ahead->next;
pa2 = ahead;
while((pa1!=NULL)&&(pb1->num !=pa1->num))
{
pa1=pa1->next;
pa2 = pa2->next;
}
printf("运行\n");
if( pa1 != NULL) //两链表中学号相同
{
pa2->next = pa1->next;
free( pa1 );
pa1 = pa1->next;
}
pb1 = pb1->next;
}
while(pb1!=NULL) //让b表中的每个结点和a表比较{
pa1=ahead->next;
会将pa1再次指向文件的开头
但是pa1 = pa1 ->next这个操作是非法的,没有导致程序崩溃是幸运的...









