Witam chce poznać opinie kogoś o większym doświadczeniu jeżeli to możliwe czy ten kod poprawnie usuwa "Liste powiązaną" za pomocą rekurencji.
#include <iostream>
#include <cstddef>
using namespace std;
struct Obiekt
{
int index;
Obiekt* w_obiekt;
};
Obiekt* DodajNowy(Obiekt* w_lista, int id)
{
Obiekt* nowyObiekt = new Obiekt;
nowyObiekt->index = 0;
nowyObiekt->w_obiekt = w_lista;
return nowyObiekt;
}
void Usun(Obiekt* w_lista);
int main()
{
Obiekt* wrog = NULL;
for(int i=0; i<5; i++)
{
wrog = DodajNowy(wrog, i);
}
Usun(wrog);
delete wrog;
wrog = NULL;
return 0;
}
void Usun(Obiekt* w_lista)
{
if(w_lista == NULL){
return;
}
else
Usun(w_lista->w_obiekt);
delete w_lista;
w_lista = NULL;
}
Osobiście wydaje mi się że jest to poprawne rozwiązanie lecz z tą pamięcią nigdy nic nie wiadomo a mój aktualny poziom nie jest w stanie w 100% stwierdzić że to jest rzeczywiście poprawny kod.
Z góry dziękuje za wyświetlenie tego tematu.
Dzień później doszłem do wniosku że ten kod jest zły i stworzyłem taki:
Obiekt* Usun(Obiekt* w_lista);
int main()
{
Obiekt* wrog = NULL;
for(int i=0; i<5; i++)
{
wrog = DodajNowy(wrog, i);
}
wrog = Usun(wrog);
delete wrog;
wrog = NULL;
return 0;
}
Obiekt* Usun(Obiekt* w_lista)
{
if(w_lista != NULL)
Usun(w_lista->w_obiekt);
delete w_lista;
w_lista = NULL;
return w_lista;
}
Części której brakuje od góry jest taka sama