Phänomen nach Speicherung des letzten Array wertes!



  • Hallo,

    ich arbeite grade an einem Projekt aus der Schule weiter.
    Nicht das ihr jetzt denkt, ihr sollt die Aufgabe erledigen! Das mach ich schon, nur stoße ich da grade auf eine Problem mit Arrays!

    Folgende Erklärung:

    Das Programm arbeitet mit einer Klasse. Aus der Klasse werden 10 Werte rausgeholt, die ich dann in einem Array abspeicher.

    Nun habe ich das Problem, wenn ich den letzten Arraywert speicher (bzw. die for schleife dieses tut) wird die letzte vorherige Variable überschrieben und erhält den letzten Wert.

    Hier einmal hoffentlich der Wesentliche Code.

    Hauptprogramm:

    // Datum der Messung anzeigen:
          String MWdate = MKessel->getMsgDatum(); //Aus Klasse
          MemoFeld->Lines->Add ("Datum: " + MWdate + "");
    
          // Zeit der Messung anzeigen:
          String MWzeit = MKessel->getMsgZeit(); //Aus Klasse
          MemoFeld->Lines->Add ("Zeit: " + MWzeit+ "\r\n");
    
          String werte[9];  //Erzeugung eines String Arrays mit 10 Felders
    
          // Messwerte anzeigen:
          for (int n = 0; n < 10; n++) {
    
             float fMW = MKessel->getMsgWert(n); //Auch hier werden die Werte aus der Klasse geholt.
             String txtMW = FloatToStrF(fMW, ffFixed, 15, 1);
    
             werte[n]=txtMW; //Den Wert txtWM in werte an der Stelle n abspeichern
    
             MemoFeld->Lines->Add ("   MW_" + IntToStr(n) + ":   " + txtMW + "°C");
          }
    

    Coder der Werte ausgabe:

    // Ein Messwert wird ausgelesen:
    float TMessung::getMsgWert(int i)
    {
         // Wertebereich testen
         if (i < 10) {
            return Werte[i];
         }  else
            return -999,9;
    }
    

    So wie gesagt, nachdem die Schleife das letzte mal durchläuft und werte[n] (n ist dann 9) im Hauptprogramm ausgeführt wird, erhält die Variable MWzeit den gleichen Wert wie werte[9].
    Nirgends im Text steht, das MWzeit = werte[9] sein soll, Zumal dieses genau passiert, nach dem

    werte[n]=txtMW; //Den Wert txtWM in werte an der Stelle n abspeichern
    

    ausgeführt wurde.

    Weis da einfach nicht weiter und weis auch absolut nicht weiter. Wenn ich das MWzeit nach der for-schleife angebe, wird MWdate überschrieben.

    Für Hilfe wäre ich sehr dankbar.

    Gruß
    Thorsten



  • Du hast dein Array zu klein angegeben - wenn du 10 Werte speichern willst, benötigst du auch ein Array der Größe 10 ("string werte[10];") - sonst schreibst du beim Zugriff auf 'werte[9]' auf den Speicherbereich hinter deinem Array - und da steht vermutlich schon die nächste lokale Variable.



  • achsooooo, dachte Arrays fangen bei 0 an !?



  • Ja, das tun sie auch, aber du gibst bei der Definition nicht den Maximalindex des Array an, sondern die Anzahl der Elemente ('string werte[10];' ist ein Array mit 10 Elementen, die mit 'werte[0]' bis 'werte[9]' angesprochen werden können).



  • Ahsoo, jetzt habe ich es verstanden! alles klar!
    Vielen Dank, Problem wurde dadurch natürlich auch gelöst!

    Gruß
    Thorsten


Anmelden zum Antworten