Modulo liefert Wert größer als Divisor
-
Hallo
Mir ist etwas passiert, das ich mit meinem Wissen nur durch einen Berechnungsfehler erklären kann, was ich aber kaum glauben kann. Jedenfalls ist das Ergebnis einer Modulo-Operation größer als der Divisor.
Es geht um folgenden Codeausschnitt, der mir in der 3. Zeile ein out of range geliefert hat.
int changed_square = rand() % (height_*width_); int offset = rand() % (height_*width_); while (squares_[changed_square].value_ == -1){Die Werte laut Debugger:
height_ = 8 (ist ein int)
width_ = 8 (auch ein int)
squares_ ... std::vector mit size=64
changed_square = 123 (wie kann das größer als 63 sein???)
offset = 31 (das passt)Unterbrochen in Zeile 3 (eben beim vector-Zugriff)
Ich verwende Visual Studio 2013 mit dem includierten Debugger, bei meinem Programm handelt es sich um eine wxWidgets-Anwendung (ohne Multithreading)
Kann mir jemand erklären, wieso changed_square größer 63 ist?
lg
-
Ich sehe da keinen Fehler.
Kannst du ein kompilierbares Minimialbeispiel posten, bei dem der Fehler auftritt?
*Edit
Was passiert denn in der Schleife? Wird die je ausgeführt?
-
Bin ich ein Esel^^.
Der Fehler ist nicht beim ersten Schleifendurchlauf aufgetreten, sondern erst später. In der Schleife gab es beim Ändern von changed_square die (unwahrscheinliche) Möglichkeit, dass es größer 64 wird.
Danke
