aerger mit funktionspointern
-
ich habe ein problem mit folgendem code.
wenn ich mehrmals mit new / delete instanzen der folgenden klasse erzeuge gibt eine memory exception.
also wirklich nur erzeugen / freigeben, ohne weitere methodenaufrufe.wenn ich jedoch "initStateMachine" im CTOR _nicht_ aufrufe, dann gehts.
hat jemand eine idee weshalb`?class TestStateMachine { private: struct StateMachine { bool (TestStateMachine::*doTrue)(void); bool (TestStateMachine::*doFalse)(void); }; StateMachine m_stateMachine; void initStateMachine(); void testStateMachine(); //do methods for stateMachine bool doError(); bool do_Connection(); public: TestStateMachine(); ~TestStateMachine(); }; TestStateMachine::TestStateMachine() { initStateMachine(); }; TestStateMachine::~TestStateMachine() { }; void TestStateMachine::initStateMachine() { m_stateMachine.doTrue = &TestStateMachine::do_Connection; m_stateMachine.doFalse = &TestStateMachine::doError; };
//Nachtrag
der aufruf innerhalb void testStateMachine() erfolgt mit:(*this.*m_StateMachine.doFalse)() (*this.*m_StateMachine.doTrue)()
wird aber zum test nicht aufgerufen. d.h. speicherfehler taucht auch ohne diesen aufruf auf.
//Nachtrag 2
Hatte ganz vergessen zu erwaehnen: Nutze gcc 3.3.1 unter linux (kernel 2.4.21)
-
Hallo,
poste doch bitte mal ein compilierbares und minimales Beispiel, dass das Problem verdeutlicht.
-
durch deine nachfrage nach einem kompilierbarem beispiel habe ich den fehler gefunden.
ich hatte die funktionszeiger in ein array geschriebn, das zu klein bemessen war.
und dieses array wurde in initStateMachine gefuellt.bei interesse kann ich das kompilierbare beispiel fur funktionszeiger posten - ist ja nun fertig.
(ist ein parser auf tabellenbasis, der ueber einen index die memberfunktionen anspringt)