Anfängerfrage: Range error
-
Schreib statt Zeile 29 das:
if(aufsumme > zahlen.size()) { // nur >, nicht >= std::cerr << "Bereichsüberschreitung. Es wurden zu viele Zahlen eingegeben.\n"; return -1; }
-
Ändere:
differenz = zahlen[k] - zahlen[k-1];in:
differenz = zahlen[k-1] - zahlen[k-2];
-
Wirf mal einen Blick auf
std::adjacent_difference...
-
Ach, wie blöd. Die Indizes sind um eins versetzt, stimmt. Hab's jetzt so gemacht, wie belli. Vielen Dank euch allen. Vom Draufstarren war ich schon völlig blind.
@IrgendeinName: Wie meinst du das?
IrgendeinName schrieb:
Check deine Indizes. Verwende dazu einen Debugger.
Ich bin doch am Debuggen. Compiler und Linker haben nicht gemeckert, erst beim Ausprobieren kam der Laufzeitfehler. Kann man das eher entdecken?
@trycatchfinally->java: error() macht genau das, was du geschrieben hast (bis auf den Fehler mit >=, der wahrscheinlich mein nächstes Problem geworden wäre). Ich denke auch, dass es umständlich ist, allerdings hab ich das aus einem Buch und wollte erstmal dabei bleiben.
@DocShoe: std::adjacent_difference macht die Sache einfacher

-
Ich bin doch am Debuggen. Compiler und Linker haben nicht gemeckert, erst beim Ausprobieren kam der Laufzeitfehler. Kann man das eher entdecken?
Nein, aber mit dem Debugger kannst du während der Laufzeit erkennen, an welcher Stelle des Codes du gerade steckst bzw. den Error bekommst, was die Sache doch deutlich einfacher machen sollte.
-
Der Tobi schrieb:
Ich bin doch am Debuggen. Compiler und Linker haben nicht gemeckert, erst beim Ausprobieren kam der Laufzeitfehler. Kann man das eher entdecken?
Nein, aber mit dem Debugger kannst du während der Laufzeit erkennen, an welcher Stelle des Codes du gerade steckst bzw. den Error bekommst, was die Sache doch deutlich einfacher machen sollte.
Nicht nur das. Du kannst vor allem auch Werte von Variablen einsehen, schrittweise durch das Programm steppen, das Programm an bestimmten Stellen oder unter bestimmten Umständen anhalten lassen, dir den Speicher oder den Callstack (wer hat wen aufgerufen) ansehen uvm.
-
Kann man sich nicht sogar mit bestimmten Debuggern den Opcode angucken?
PS, OT:
Wie viele atheistische Babys hat man schon aus Versehen - oder gar mit Absicht! - getauft?

-
Der Tobi schrieb:
Kann man sich nicht sogar mit bestimmten Debuggern den Opcode angucken?
Assembly? ja.
-
Ok, da muss ich mich wohl etwas genauer mit dem Debuggen befassen. Ich drück immer nur F5 und guck, was da steht.
Den OT kapier ich nicht. War aber vielleicht auch gar nicht für mich.
-
Eine vernünftige Implementierung der Standardbibliothek enthält Debug-Checks für Indizes in
std::vector::operator[].Stelle sicher, dass du im Debug-Modus kompilierst und den Debugger einschaltest.