Mam problem ze zwolnieniem pamięci.
Mam funkcje która sortuje przez wstawianie, elementy do listy dwukierunkowej, lecz po zakończeniu programu mam raport, który wskazuje na wyciek pamięci przy właśnie tej fukncji.
Próbowałem dać
free(tmp) pod koniec funkcji, lecz przez to niewiedzieć czemu głowa listy mi się traci i podczas debugowania ma adres "0xfeefee", co powoduje wywalenie programu, lecz wycieku już nie ma.
typedef struct el_listy
{
struct zespol dane;
struct el_listy *next;
struct el_listy *poprz;
struct podwieszana *next2;
}el_listy;
struct el_listy *glowa=NULL;
struct el_listy *ogon=NULL;
void dodaj_zespol (struct zespol dane_zesp,int *licznik){
struct el_listy *nowy=NULL;
struct el_listy *tmp=glowa;
nowy = (el_listy*)malloc(sizeof(el_listy));
if (glowa==NULL){
nowy->dane = dane_zesp;
nowy->next = NULL;
nowy->poprz= NULL;
nowy->next2=NULL;
glowa=nowy;
ogon=nowy;
}
else{
nowy->dane = dane_zesp;
if ((strcmp(glowa->dane.nazwa, nowy->dane.nazwa))>0){
nowy->next = glowa;
glowa->poprz=nowy;
nowy->poprz=NULL;
nowy->next2=NULL;
glowa=nowy;
}
else{
while ((tmp->next!=NULL)&&((strcmp(tmp->dane.nazwa, nowy->dane.nazwa) < 0)))
tmp=tmp->next;
nowy->poprz = tmp;
nowy->next = tmp->next;
nowy->next2=NULL;
if (tmp->next != NULL){
tmp->next->poprz = nowy;
tmp->next = nowy;
}
else{
nowy->next=NULL;
tmp->next = nowy;
ogon=nowy;
}
}
}
(*licznik)++;
// tu dawałem free(tmp)
}