string res(dominoes.size(), ' ');
Устанавливает размер res
равным dominoes
, и этот размер никогда не изменяется. res
никогда не может быть больше, чем dominoes
. При вводе ".LR" длина dominoes
равна 5. res
имеет длину 5.
dominoes = 'L' + dominoes + 'R';
Изменяет размер dominoes
на 7.
for (int r = 1; r < dominoes.size(); r++)
повторяет r
с 1 до 6.
В сторону: когда я вижу <=
в for
l oop, я останавливаюсь для более длинного взгляда. Это неправильно гораздо чаще, чем это правильно.
В этом случае кажется, что это только своего рода ошибка, позволяющая
for (int i = l; i <= r; i++)
if (i > 0) res[i - 1] = dominoes[r];
повторять i
с l
до r
. Поскольку r
может быть 6, i
может быть 6. Это означает, что
if (6 > 0) res[6 - 1] = dominoes[6];
возможно. Это разрешает до
res[5] = dominoes[6];
и res[5]
недопустимо. Запись в него вызывает неопределенное поведение, и в этом случае, похоже, он перезаписывает нулевой терминатор строки c в стиле, поддерживающей string
.
Еще одно замечание: избегайте использования l
в качестве имени переменной. Это выглядит слишком похоже на 1
и приводит к ошибкам или неправильному чтению кода.
Чтобы исправить, вы можете расширить лог c из if (i > 0)
в if (i > 0 && i-1 < res.size())
, чтобы отфильтровать эту проблему, но вам лучше переделать или заменить алгоритм, чтобы вы никогда не оказались в такой ситуации.