Tastatureingabe verändert Vektor
-
Hallo,
ich programmiere momentan ein Programm zum Aufnehmen von Messwerten. Die Messdaten (ca. 80 pro Sekunde) werden in einem Vektor gespeichert. In der Konsole wählt man per cin den gewünschten Messmodus und dann startet der Messvorgang nach einem Countdown. Nach dem Drücken einer beliebigen Taste wird der Messvorgang beendet. Das habe ich mit kbhit() realisiert. Soweit funktioniert alles.
Nur leider hat das Programm einen großen Fehler: Wenn man eine Taste drückt (egal welche) wenn keine Eingabe vom Benutzer geplant ist (zB beim Countdown) startet der Messvorgang nicht, sondern ich bekomme die Fehlermeldung "vector subscript out of range". Es wird also auf eine Stelle im Vektor zugegriffen, die es nicht gibt.
Ich kann mir die Fehlermeldung aber nicht erklären, da das Programm wie gesagt super funktioniert, wenn man nur dann eine Taste drückt, wenn man in der Konsole dazu aufgefordert wird. Wenn man eine Taste drückt passiert also anscheinend irgendwas mit dem Vektor.
Habt ihr eine Idee was da passiert und wie man es beheben kann?Gruß, Julian
-
Ich habe eine Idee, woran es liegt: Das Programm hat einen Fehler.
Für mehr reicht deine Problembeschreibung nicht.
-
Mit dem Tastendruck passiert am Vektor nix ... aber die Nachfolgenden cins werden verwirrt. Du springst dann warschenilich irgendwo hin wo keine Messwerte angefordert werden (drück mal vor Eingabeaufforderung ne Sinnvolle Taste) und greifst dann mit [] auf den Vektor zu. Änder zum debuggen mal alle [] in .at() ... die schmeissen dann nämlich nen sinnigeren Fehler und nutz deinen Debugger.
-
nö im debugmode macht vc++ auch den range test mit [], at() macht den glaub ich halt immer
edit:
[] greift einfach auf den speicher zu -> error im normalfall
und at() wirft eine exception
-
OK, danke für die schnellen Antworten. Ich werde es morgen gleich mal mit .at() versuchen. Momentan verwende ich .push_back() um den Vektor zu füllen. Sollte man generell aber lieber .at() verwenden?
Gruß, Julian
-
justjulian schrieb:
Momentan verwende ich .push_back() um den Vektor zu füllen. Sollte man generell aber lieber .at() verwenden?
Diese Frage macht keinen Sinn. Informier dich mal, was push_back und at genau machen.
-
So, mit .at() gabs genau die gleiche Fehlermeldung. Ich nehm jetzt einfach ein Array anstatt einen Vektor, da ich weiß, wie viele Messwerte ich zu erwarten habe.
Falls trotzdem noch jemand eine Idee hat, warum es vorher nicht funktioniert hat würde es mich immer noch sehr interessieren.Gruß, Julian
-
Wie waer's Mal mit auf das Wesentliche reduzierten Code? Sollen wir hier Ratespielchen spielen oder was erwartest Du?

-