2012-06-17 62 views
0

里面我有以下两种结构:如何释放一个结构是一个其他结构

typedef struct label{ 

    int id; 
    double p,*t,q,c; 

    int V[45]; 
    struct label *next; 
    struct label *prev; 
    struct path *tail; 
    struct path *head; 

}label; 

typedef struct path{ 
    int i; 

    struct path *Pperv; 
    struct path *Pnext; 
}path; 

void main(){ 

    int i,j; 
    struct label *Current,*Head,*Tail; 
    struct path *test1,*path_head,*path_tail; 

    Head=(struct label*)malloc(1*sizeof(struct label)); 
    Tail=(struct label*)malloc(1*sizeof(struct label)); 

    Head->next=Tail; 
    Tail->prev=Head; 


    for (i=0;i<250000;i++) 
    { 
     Current=(struct label*)malloc(1*sizeof(struct label)); 
     Current->t=(double*)malloc(15*sizeof(double)); 

     Current->head=(struct path*)malloc(1*sizeof(struct path)); 
     Current->tail=(struct path*)malloc(1*sizeof(struct path)); 
     Current->head->Pnext=Current->tail; 
     Current->tail->Pperv=Current->head; 

     for (j=0;j<15;j++) 
     { 
      test1=(struct path*)malloc(1*sizeof(struct path)); 

      test1->Pperv=Current->head; 
      test1->Pnext=Current->head->Pnext; 

      Current->head->Pnext->Pperv=test1; 
      Current->head->Pnext=test1; 


      test1->i=1; 
      Current->t[j]=23123.4323334; 

     } 
     Current->next=Tail; 
     Current->prev=Tail->prev; 
     Tail->prev->next=Current; 
     Tail->prev=Current; 
     Current->p=54545.323241321; 
    } 
} 

我只是用一些填充在其中的变量,这样我可以让我的问题的一个例子。我面临的问题是如何释放名为“Label”的第一个结构中包含的struct“Path”。

我想我比折腾更感激如果somenone可以给我在C

+0

这看起来像一个双向链表。我尝试了搜索“免费链接列表”,并发现了很多与此类似的问题。 –

回答

2

一般如何正确地解放了结构的代码,你只需要与调用是对称malloc/calloc

label *current = malloc(sizeof(*current)); 
current->head = malloc(sizeof(*current->head)); 

... 

free(current->head); 
free(current);