zwalnianie pamięci

0

Hej, mam problem z napisaniem destruktora. Mam taki kod:

 
class A
{
	int* tab;
	int rozmiar;
public:
	A(int r,int* t)
	{
		rozmiar=r;
		tab = new int[rozmiar];
		tab = t;
	}

	void wypisz()
	{
		for(int i=0; i<rozmiar; i++)
		{
			cout<<tab[i]<<endl;
		}
	}

	~A()
	{
		delete[] tab;
	}
};

Dostaję taki komunikat: app1 has triggered a breakpoint.
Nie rozumiem czemu tak nie chce działać skoro to(napisane w funkcji main) działa:

 
int* a;
a = new int[4];
delete[] a;

Bardzo proszę o pomoc/wyjaśnienie. Pozdrawiam

0
class A
{
        unsigned rozmiar; // unsigned - no chyba że przewidujesz rozmiar np: minus trzy. // lepiej z przodu z uwagi na listę inicjalizacyjną
        int* tab;
public:
      /*
        A(int r=0,int *t=0)
        {
                rozmiar=r;
                tab = new int[rozmiar];
                //tab = t; // tu podmieniasz przydzielony wskaźnik
               if(t) memcpy(tab,t,rozmiar*sizeof(int)); // if na wypadek przykazania NULL'a
        }
        */
        // lepiej tak:
        A(int rozmiar=0,int *t=0):rozmiar(rozmiar),tab(rozmiar?new int[rozmiar]:0)
          {
           if(t) memcpy(tab,t,rozmiar*sizeof(int));
          }

 
        void wypisz()
        {
                for(unsigned i=0; i<rozmiar; ++i) // ten sam typ co rozmiar, lepiej ++i niż i++
                {
                        cout<<tab[i]<<endl;
                }
        }
 
        ~A()
        {
              if(rozmiar)  delete[] tab;
        }
};

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