Piszę program, którego zadaniem jest obliczanie wyrażeń wpisywanych w ONP. Mam problem przy przechodzeniu przez drzewo binarne. Otrzymuję komunikat o treści:
Unhandled exception at 0x012A3006 in KalkulatorAll.exe: 0xC0000005: Access violation reading location 0xCDCDCDED.
Komunikat z call stacka:
KalkulatorAll.exe!Wezel::pobierzLewy() Line 104
KalkulatorAll.exe!Drzewo::inOrder(Wezel *w, int mode) Line 95
KalkulatorAll.exe!Drzewo::inOrder(Wezel *w, int mode) Line 100
KalkulatorAll.exe!Kalkulator::pokazInfiks() Line 19
KalkulatorAll.exe!main() Line 20
Metoda pobierzLewy() wygląda następująco:
Wezel *Wezel::pobierzLewy()
{
return lewy; //Line 104
}
inOrder():
void Drzewo::inOrder(Wezel *w, int mod)
{
int rodzaj;
if(w != NULL){
if (w->pobierzLewy() != NULL)// Line 95
inOrder(w->pobierzLewy(),mod);
}
switch (rodzaj = w->pobierzRodzaj())// Line 100
{
case ST:
if (mod==1)
cout << w->pobierzWartosc() << " ";
break;
case ZM:
if (mod==1)
cout << w->pobierzNazwa() << " ";
else
{
if (zmienne->czyZdef(w->pobierzNazwa()))
{
w->podajRodzaj(ST);
w->podajWartosc(zmienne->pobierz(w->pobierzNazwa()));
w->podajNazwa(0);
}
}
break;
case OP:
if (mod==1)
cout << w->pobierzOperator()<< " ";
break;
}
if (w->pobierzPrawy() != 0)
inOrder(w->pobierzPrawy(),mod);
}
pokazInfiks():
void Kalkulator::pokazInfiks()
{
drzewo.inOrder(drzewo.pobierzKorzen(),1);
}
I sama metoda main():
int main()
{
Kalkulator kalkulator;
string rownanie;
cout << "Podaj rownanie: ";
getline(cin, rownanie, '\n');
kalkulator.wprowadz(rownanie);
kalkulator.pokazInfiks();
// ...
}
Z góry dziękuję za wszelką pomoc.