這是結構:不能自由鏈表
typedef struct listeEle {
int pos;
struct listeEle *next;
} ListEle;
這是我創建列表:
ListEle *mokli(int n){
if(n<=0)
{
fprintf(stderr, "Falscher Parameter für mokli... Programm beendet.");
exit(0);
}
else
{
ListEle *lst;
lst = malloc(sizeof(ListEle));
lst->next = NULL;
lst->pos = 1;
int i;
ListEle *new;
ListEle *ptr;
ptr = lst;
for(i=1; i<n; i++)
{
new = NULL;
new = malloc(sizeof(ListEle));
new->next = NULL;
new->pos = i+1;
ptr->next = new;
ptr = ptr->next;
}
return lst;
}
}
而這正是我試圖釋放它
void unmokli(ListEle *lst)
{
if(lst->next == NULL)
{
free(lst);
lst = NULL;
printList(lst);
printf("1 > Liste vollständig gelöscht.\n");
}
else
{
ListEle *head;
head = lst;
int del = 0;
while(head)
{
ListEle *temp = head;
head = head->next;
free(temp);
del+=1;
}
free(lst);
lst = NULL;
printf("2 > Liste deleted (%d).\n", del);
}
}
這是我打印的方式
void printList(ListEle *anfang){
if(anfang == NULL)
{
printf("List not av...\n");
}
else
{
ListEle *ptr;
ptr = anfang;
int i = 1;
while(ptr)
{
printf("Element %i -> ListeEle pos=%i\n", i++, ptr->pos);
ptr = ptr->next;
}
}
}
問題在於主要方法。我在這裏創建的列表不會被釋放,儘管我將它正確地傳遞給釋放函數。
int main(void){
ListEle *liste;
liste = mokli(6);
printList(liste);
unmokli(liste);
printList(liste);
return 0;
}
unmokli後它應該完全釋放,但主函數內的列表仍然分配。我怎樣才能完全免費的名單?
的方法簽名必須保持這樣的。這是一項任務。 – IMX
@IMX然後,你只需在'main'中設置'liste'指針爲'NULL',或者不再使用指針。當你釋放它指向的內容時使用指針會導致未定義的行爲。 –
對,我會刪除我的評論。 –