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 🙂


Anmelden zum Antworten