我的程序管理結構鏈表。免費的結構....我不知道我是否正確
這裏是我的STRUC:
typedef struct wagon wagon;
typedef struct wagon{
wagon *next;
marchandise_ptr *liste;
double volume_courant;
}train_ptr;
當貨車*接下來是一個指向我的鏈接列表的下一個「細胞」,marchandise_ptr *列表是一個指向另一個鏈表。要釋放我strucure,我已經着手如下:
在INT主要():
train_ptr *train=creer_un_train(...)//so train is the beginning of my linked list
liberer_train(&train);
我的職責是:
創建一個 「馬車」
wagon *creer_wagon(marchandise_ptr *liste,double volume_courant){ //it creates a wagon
assert(volume_courant>=0);
wagon *wag=malloc(sizeof(wagon));
if(wag==NULL)
return NULL;
wag->next=NULL;
wag->volume_courant=volume_courant;
wag->liste=liste;
return wag;
}
添加在我的鏈式列表的末尾創建的「旅行車」:
train_ptr *ajouter_wagon_a_la_fin_du_train(train_ptr *train,double volume_courant, marchandise_ptr *liste){
wagon *wag=creer_wagon(liste,volume_courant);
if(wag==NULL)
return NULL;
if(train==NULL)
train=wag;
else{
train_ptr *wag_current=train;
while(wag_current->next!=NULL)
wag_current=wag_current->next;
wag_current->next=wag;
}
return train;
}
創建一個火車:
train_ptr *creer_un_train(unsigned int nombre_de_wagons,marchandise_ptr *liste){
assert(nombre_de_wagons>=0);
int i;
train_ptr *train=NULL;
for(i=0;i<nombre_de_wagons;i++){
train=ajouter_wagon_a_la_fin_du_train(train,rand()%10,liste);
if(train==NULL)
return NULL;
}
return train;
}
免費火車:
void liberer_train(train_ptr **train){
train_ptr *p_current = *train;
while(p_current!=NULL){
*train = p_current->next;
p_current->next=NULL;
free(p_current->liste);
free(p_current);
p_current = *train;
}
}
P.S:清單當然是一個指針鏈表的beginnig:
typedef struct marchandise marchandise;
typedef struct marchandise{
double volume;
double volume_total;
char nom;
marchandise *suivant;
}marchandise_ptr;
感謝您的關注! (並對不起我的英語,我不是母語......:D)
您可以使用valgrind來搜索內存泄漏。 – tumdum
我不明白'聽'是什麼?它指向的地方 – Gopi
如果'p_current-> liste'是另一個鏈表,那麼'free(p_current-> liste)'將只釋放根目錄,指向另一個鏈表(也包含結構體) –