释放链表中的一个元素时,发现该元素的下下级指针指向被改变
代码简陋 ,只是临时用来测试函数滴。
#include<stdio.h>#include<windows.h>#include<malloc.h>#include<memory.h>#define MAX_SIZE 7typedef struct{ int index; char name[8]; char sex[2]; int age; int score;}Datatype;typedef struct node{ Datatype data; struct node *next;}Node , *Linklist;Linklist head;void DeleteNode(Linklist A,Linklist B ,Linklist C){ Node *p=A,*q=B->next,*r=C->next,*temp; int flag=0; // Node of A linklist is exist in B when flag is zero. it is 2 havd a capture while(p->next!=NULL) { temp=p->next; while(q != NULL) { if(q->data.index == temp->data.index ) { flag=1; break; } q=q->next; } while(r != NULL ) { if(r->data.index == temp->data.index ) { flag=flag+1; break; } r=r->next; } if(flag == 2) { p->next=temp->next; free(temp); //这里释放完就出问题了, } else { p=p->next; //restore } q=B->next; r=C->next; }}void main(){ Linklist A,B,C; int i; A = malloc(sizeof(Linklist)); A->next=malloc(sizeof(Linklist)); A->next->next =malloc(sizeof(Linklist));A->next->next->next =malloc(sizeof(Linklist)); B = malloc(sizeof(Linklist)); B->next=malloc(sizeof(Linklist)); B ->next->next =malloc(sizeof(Linklist));B->next->next->next =malloc(sizeof(Linklist)); B ->next->next->next->next =NULL; A ->next->next->next->next =NULL; C = malloc(sizeof(Linklist)); C->next=malloc(sizeof(Linklist)); C ->next->next =malloc(sizeof(Linklist));C->next->next->next =malloc(sizeof(Linklist)); C->next->next->next->next =NULL;//------------------------------------------------------- A->next->data.index =2; A->next->next->data.index =4; A->next->next->next->data.index =6; B->next->data.index =4; B->next->next->data.index =5; B->next->next->next->data.index =9; C->next->data.index =1; C->next->next->data.index =4; C->next->next->next->data.index =9;DeleteNode(A,B,C);system("pause");}