Witam, męczę się już bardzo długo z wyciekiem pamięci w moim programie. Na wstępie powiem, że próbuje zrobić sprzężenie zwrotne w układzie logicznym który sam tworze. Podam fragmenty kodu oraz wskaże gdzie występuje problem:
class OperatorBinarny : public Sygnal
{
public:
OperatorBinarny(Sygnal *wejscie1, Sygnal *wejscie2);
void zmienSygnal(Sygnal *syg1, Sygnal *syg2){ we1 = syg1; we2 = syg2; };
protected:
Sygnal *we1, *we2;
bool wejscie1() const { if(we1) {return we1->wyjscie();} return false; };/*Zwraca wartosc wejscia do ukladu*/
bool wejscie2() const { if(we2) {return we2->wyjscie();} return false; };
};
OperatorBinarny::OperatorBinarny(Sygnal *wejscie1, Sygnal *wejscie2)
: we1(wejscie1), we2(wejscie2)
{
}
class BramkaOr : public OperatorBinarny
{
public:
BramkaOr(Sygnal *we1, Sygnal *we2);
bool wyjscie() const { return wejscie1() || wejscie2(); };
};
BramkaOr::BramkaOr(Sygnal *we1, Sygnal *we2)
: OperatorBinarny(we1, we2)
{}
/*Klasa główna:*/
....
delete *it;
*it = new BramkaOr(syg_tmp, syg_tmp1);/*Nadpisanie pola wektora*/
....
BramkaOr *tmp = dynamic_cast<BramkaOr*>(*it);
tmp->zmienSygnal(sygnaly[w1], sygnaly[w2]);
cout << "wartosc: " << tmp->wyjscie() << endl;
....
Problem jest podczas wywołania funkcji wyjscie(), dokładnie debugger wskazuje to miejsce [kod=c++]bool wejscie1() const { if(we1) {return we1->wyjscie();} return false; };[/kod]
Generalnie wszystkie sygnały przechowuje w wektorze, i pomysł mam taki żeby wejścia które są wyjściami jeszcze nie określonych bramek inicjować wartością logiczną false, a po wczytaniu całego układu zmieniać poszczególne sygnały na te już zdefiniowane (bramki). Tyle tylko, że po zmianie sygnału w bramce na nowy mam wyciek pamięci.
Z góry dziękuję za wszelką pomoc, w razie potrzeby mogę wrzucić więcej kodu jakby ktoś chciał się zgłębić w mój problem.