Я думаю, что оператор по модулю %
лажает. См. Операция по модулю с отрицательными числами .
Вы индексируете график с помощью (r - 1) % R
, который будет отрицательным, если r
равен нулю.
Поскольку индекс отрицательный, он, вероятно, берет значения из более высокого уровня в стеке, возможно значение r
или c
.
Я бы создал функцию, которая выполняет ожидаемый модуль (некоторые примеры приведены в ссылке выше) и использовал бы ее вместо этого.
Вы также должны привести его к подписанному типу, так как это предотвратит установку значения 255: mod(((int8_t)r)-1, R)
переполнением. Или объявите r
и c
как подписанные типы.