Witam,
program losuje współczynniki wielomianu po podaniu do konstruktora stopnia wielomianu, następnie ma dodawać wielomiany za pomocą przeciążania operatora "+", operator ">" ma podmieniać współczynniki wielomianu, opeartor "<" ma wyświetlać wielomian,
Problem polega na tym, że program działa "poprawnie" tylko i wyłącznie, gdy nie zwalniam zaalokowanej pamięci destruktorem, gdy zwolnię pamięc program się wysypuje, a konkretnie wartości zapisane w tablicach pokazują przykładowe wartości z pamięci. Nie mam pojęcia jak rozwiązać ten problem, prosiłbym o jakiekolwiek wskazówki.
Z góry dziękuje.
#include <iostream>
#include <ctime>
#include <cstdlib>
using namespace std;
class Wielomian
{
public:
int* t; int st; int *tab;
Wielomian(int st);
Wielomian(int st, int* t);
Wielomian ();
Wielomian (const Wielomian &f); // konstruktor kopiujacy
~Wielomian();
//operator =
Wielomian& operator=(const Wielomian& c)
{
st = c.st;
t = c.t;
return *this;
}
// operator +
Wielomian operator+(const Wielomian Drugi);
};
//konstruktor bezparametrowy
Wielomian::Wielomian() {
int st=5;
this->st = st;
t = new int[st+1]{};
}
//konstruktor parametrowy losuje wspolczynniki
Wielomian::Wielomian(int st)
{
this->st=st;
t = new int[st+1];
tab[st+1];
tab = t;
for (int i=0; i<=st; i++)
{
int x = (rand() % 50) + 0;
t[i]=x;
tab[i]=x;
}
}
//konstruktor kopiujacy
Wielomian::Wielomian (const Wielomian &f)
{
st=f.st;
t=f.t;
}
//operator "<<"
ostream& operator<<(ostream& pokaz, Wielomian c)
{
for (int i=(c.st); i>=0; i--) {
if (c.t[i] == 0)
{
if(i==0)
pokaz << "a";
else
pokaz << "a" << i << "x^" << i << " + ";
}
else
{
if (i == 0)
{
pokaz << c.t[i];
}
else
pokaz << c.t[i] << "x^" << i << " + ";
}
}
return pokaz;
}
//operator ">>"
istream& operator>>(istream& wpisz, Wielomian &c)
{
for (int i=c.st; i>=0; i--)
{
cout <<endl<<"prosze podac wspolczynnik przy potedze "<<i <<"w celu podmiany: ";
wpisz >>c.t[i];
}
return wpisz;
}
//operator "+"
Wielomian Wielomian::operator+(const Wielomian Drugi )
{
Wielomian wynik = *this;
for (int i=0; i<=wynik.st ; i++)
wynik.t[i] = Drugi.t[i] + wynik.t[i];
return wynik;
}
//destruktor
Wielomian::~Wielomian()
{
//delete[] t; t=NULL;
//cout <<endl<<"destruktor" <<endl;
}
int main()
{
srand (time(NULL));
Wielomian c1(3);
Wielomian c2(3);
cout <<c1 <<endl;
cout <<c2 <<endl;
cout <<c1+c2 <<endl;
cin >> c1;
cout <<c1 <<endl;
return 0;
}