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?)


  • Mod

    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.


Anmelden zum Antworten