Zwalnianie pamięci w liście

0

Witam, mam problem z funkcją która będzie zwalniała pamięć przed wyjściem z programu.
Wykorzystuję listę list (lista podwieszana).
Tak wyglądają struktury:

 typedef struct Samochod
{
	char Model[STRING_MAX_SIZE];
	char Kolor[STRING_MAX_SIZE];
	char Nadwozie[STRING_MAX_SIZE];
	uint Cena;
	struct Samochod* next;
}Samochod;


typedef struct Marka
{
	char NazwaMarki[STRING_MAX_SIZE];
	struct Marka* next;
	Samochod *head;
}Marka;

Następnie przed zakończeniem programu chcę wywołać funkcję zwalniającą pamięć w całej bazie, jednak program wyrzuca błąd. Wiem że nie mogę odnosić się już do pamięci, której miejsce zwolniłem dlatego wywala error. Ktoś mógłby dać jakieś wskazówki jak poprawić tą funkcje:

 
void DestroyDataBase(Marka *Head)
{
	Marka *wsk = Head; //kopia głowy
	while (wsk != NULL)
	{
		
		Samochod* wsk1 = wsk->head; //kopia głowy listy podwieszanej
		free(wsk);
		while (wsk1 != NULL)
		{
			free(wsk1);
			wsk1 = wsk1->next; //przejscie do kolejnego elementu listy podwieszanej
		}
		wsk = wsk->next; //przejście do kolejnego elementu listy
	}
}
0
            free(wsk1); // zwalniasz pamięć
            wsk1 = wsk1->next; //próbujesz odczytać zwolnioną pamięć
0

Tak, zdaje sobie z tego sprawę, jednak jakoś muszę przechodzić do następnego elementu listy, nie mam za bardzo pomysłu jak to zrobić.

1

Musisz użyć tzw. "zmiennej tymczasowej".

Samochod* tmp = wsk1->next;
free(wsk1);
wsk1 = tmp;
0

Ok, teraz działa. Dzięki wielkie za pomoc. :)

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