回复 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这个操作是非法的,没有导致程序崩溃是幸运的...