2012-06-17 2 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; 
    } 
} 

Я просто использовал пример заполнения некоторых переменных в них, так что я могу сделать мой вопрос. Я столкнулся с проблемой, как освободить структуру «Путь», которая содержится в первой структуре под названием «Ярлык».

Я бы мне STH более признателен, если somenone может дать мне код, как правильно бесплатно как в C. структур

+0

Это похоже на двунаправленный список. Я попробовал SO искать «бесплатный связанный список» и нашел много вопросов, подобных этому. –

ответ

2

В общем, вы просто должны быть симметричными с призывами malloc/calloc:

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

... 

free(current->head); 
free(current); 
Смежные вопросы