Tworzę listę zawierającą "spis zakupów" Konstruktor, Konstruktor kopiujący oraz metoda do wypisywania działają, lecz nie wiem dlaczego program wywala się w destruktorze.
Może wychodzę gdzieś poza liste i dotykam nie przyznanej mi pamięci? Mam wrażenie, że konstrukcja jest w porządku. Co mogło pójść nie tak?
Przepraszam znalezłem już bład... :)
Można zamknąć
#include "stdafx.h"
#include <string>
#include <iostream>
using namespace std;
class Lista
{
struct Element
{
int ilosc;
string nazwa;
Element *nastepny;
};
Element *korzen, *ostatni;
public:
Lista()
{
korzen = ostatni = NULL;
}
Lista(const Lista &list)
{
if (list.korzen == list.ostatni)
korzen = ostatni = NULL;
else
{
Element *pom = list.korzen;
korzen = new Element;
korzen->ilosc = pom->ilosc;
korzen->nazwa = pom->nazwa;
ostatni = korzen;
while(pom!=list.ostatni)
{
pom = pom->nastepny;
ostatni->nastepny = new Element;
ostatni = ostatni->nastepny;
ostatni->ilosc = pom->ilosc;
ostatni->nazwa = pom->nazwa;
}
}
}
~Lista()
{
Element *pom=korzen;
while(pom!=ostatni)
{
pom = korzen;
pom = pom->nastepny;
delete pom;
}
delete korzen;
}
void dodaj(int ilosc, string nazwa)
{
if (ostatni!=NULL)
{
ostatni->nastepny = new Element;
ostatni = ostatni->nastepny;
}
else
{
korzen = ostatni = new Element;
}
ostatni->ilosc = ilosc;
ostatni->nazwa = nazwa;
}
void wyswietl()
{
Element *pom=korzen;
while(pom!=ostatni)
{
cout << pom->nazwa << " " << pom->ilosc<<endl;
pom = pom->nastepny;
}
cout << ostatni->nazwa << " " << ostatni->ilosc<<endl;
}
};
int main()
{
Lista list;
list.dodaj(5, "bulki");
list.dodaj(5, "mleko");
list.dodaj(5, "mleko");
list.wyswietl();
Lista l1 = list;
l1.wyswietl();
return 0;
}