Zwalnianie pamięci po liście jednokierunkowej

0

Witam.
Czy zwalnianie pamięci w taki sposób jest poprawny?

for(tmp=head; tmp; tmp=tmp->nast)
    free(tmp); 

Czy jeżeli zwalniam tmp to pętla nie zgubi wskaźnika na następny element?

1

chcesz dorwać się do czegoś spod zwolnionej pamięci, ub.

0

No właśnie, jakaś podpowiedź jak się za to zabrać?

2

Technicznie nie powinieneś tak robić, praktycznie - jeśli Twój program nie jest wielowątkowy - będzie to działać, ale może wprowadzić niemiłe błędy w przyszłości :P
Ja celowałbym w taki kod:

current = head;
while (current != nullptr) {
  cośtam* next = tmp->next;
  free(current);
  current = next;
} 
3

Jedno z:

  • while(head)
    {
    tmp=head;
    head=tmp->next;
    free(tmp);
    }
  • while(head)
    {
    tmp=head->next;
    free(head);
    head=tmp;
    }
0

Dziękuję, problem rozwiązany.

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0