Случайный переворот битов C - PullRequest
0 голосов
• 1000 быть отправленным), после второй итерации граф [0] [3] переворачивается на 1, когда он должен оставаться равным 0.

1 Ответ

3 голосов
/ 26 мая 2020

Я думаю, что оператор по модулю % лажает. См. Операция по модулю с отрицательными числами .

Вы индексируете график с помощью (r - 1) % R, который будет отрицательным, если r равен нулю.

Поскольку индекс отрицательный, он, вероятно, берет значения из более высокого уровня в стеке, возможно значение r или c.

Я бы создал функцию, которая выполняет ожидаемый модуль (некоторые примеры приведены в ссылке выше) и использовал бы ее вместо этого.

Вы также должны привести его к подписанному типу, так как это предотвратит установку значения 255: mod(((int8_t)r)-1, R) переполнением. Или объявите r и c как подписанные типы.

...