Variable ändert Ihren Wert
-
Hallo,
ich habe eine Schleife geschrieben, mit der ich 2 IOBoards initialisiere.
m_MaxIOBoard wird zunächst auf 2 gesetzt - nach Abschluss der Initialisierung ist der Wert allerdings i.d.R. auf 0 verändert, ohne dass die Variable in der Zwischenzeit irgendwo angerührt wird.Der Aufruf erfolgt hier:
m_MaxIOBoard = 2; int j; for(j=0;j<m_MaxIOBoard;j++) { iReturncode = m_IOboard[j].Init(j); };Im Objekt m_IOboard sieht die Init Routine wiefolgt aus:
int CIOBoard::Init(int BoardNr) { /** Initialisierungscode für Hardware entfernt, der Fehlerlos abgeschlossen wird **/ /* Jedes IOBoard hat 8 LEDs die wiederum als Objekte angelegt sind, diese werden ebenfalls Initialisiert */ int i; for (i=0;i<8;i++) { m_Led[i+(8*BoardNr)].m_BoardNr=m_BoardNr; m_Led[i+(8*BoardNr)].m_PortNr=i; m_Led[i+(8*BoardNr)].SetStatus(false); } return 0; }Kann mir jemand erklären, was VC++ 6 da macht?
Danke + Grüße
Flo
-
Bist du sicher, daß du mit dem richtigen Objekt arbeitest? Von wo aus rufst du denn den oberen Code auf?
(und wie ist m_IOboard definiert? CIOBoard*? CIOBoard[] (welche Größe)? vector<>? ...? Ist die Variable ordentlich initialisiert worden?)
-
Ich kann mich CStool nur anschließen.
Nimm einmal an, Deine Variable m_MaxIOBoard liegt hinter dem array m_Led in der Klasse. Der ist aber zu klein definiert. Dann würde der Aufruf von Init Speicherbereich hinter m_Led überschreiben und z.B. auch Deine Variable m_maxIOBoard verändern.