读书人

释放链表中的一个元素时发现该元素的

发布时间: 2012-10-12 10:17:04 作者: rapoo

释放链表中的一个元素时,发现该元素的下下级指针指向被改变
代码简陋 ,只是临时用来测试函数滴。

C/C++ code
#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");}



麻烦大家帮忙看下

[解决办法]
你分配的内存有问题吧,A = malloc(sizeof(Linklist));
应该是A = malloc(sizeof(Node));
Linklist只是一个结构体指针,sizeof(Linklist)是指针的大小吧。

读书人网 >C语言

热点推荐