Нет возможности "ошибки вне диапазона", поскольку объем памяти b равен [200] [200], а диапазон результатов a [*] составляет от 0 до 10.
Мир полон глючного кода, потому что люди делают подобные предположения. первая вещь, которую вы должны сделать, это доказать это правильно. Это так же просто, как поместить что-то вроде:
if (first < 0 || first > 199 || second < 0 || second > 199) {
cerr << "Violation, first = " << first << ", second = " << second << "\n";
exit(1);
}
непосредственно перед вашей строкой, которая устанавливает для элемента b[][]
значение true
.
Кроме того, это также будет Целесообразно также проверить доступ к другим массивам. Поскольку у нас нет ваших тестовых данных, мы не знаем, какое значение будет вводиться для n
или m
, но, поскольку эти значения могут привести к неопределенному поведению (при доступе за пределами массива), их также следует тщательно изучить .
Если вы хотите быть уверенными в том, что это не вызывает проблем, вы можете динамически выделить правильный размер при необходимости. Например, как только вы получили m
от пользователя:
int *a = new int[m*2];
// Use it as you wish, elements <0..m*2-1> inclusive.
delete [] a;