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;
}