2014-02-09 4 views
0

Я создаю функцию, которая выполняет итерацию через сетку точек и возвращает индексы всех смежных точек. Для края сетки есть соседние точки, которых не существует, поэтому я создал несколько блоков try для обработки этих случаев. Вот код:C++ вне допустимого диапазона

try { 
      all_below[j] = Mesh.matrix[r[i]][c[i] - j]; 
     } 
     catch (const std::out_of_range& oor) { 
      below = NAN; 
      below_k = NAN; 
     } 

Но всякий раз, когда я пытаюсь запустить программу, заявление поймать не поймать исключение и сбоев программы (потому что Mesh.matrix находится вне диапазона). Что я делаю не так?

Edit:

матрица представляет собой 2D вектор междунар.

+2

Какой тип 'матрицы'? – jrok

+1

Является ли матрица 'operator []' возбуждением этого исключения? – juanchopanza

+4

Подарок. A. Тест. http://sscce.org –

ответ

3

Если all_below и Mesh.matrix являются массивами, тогда массивы не генерируют никаких исключений, если вы используете индекс за пределами доступного диапазона.

И как указано @Mooing Duck, оператор векторов векторов также не генерирует исключения. Это функция-член в(), которая выдает исключение.

+0

@Mooing Duck Я обновил свой пост. :) –

+0

Я подумал, что это было что-то маленькое. Благодарю. – user1558168

0

std :: vector не создает исключений при доступе за пределы доступа с использованием оператора вектора []. Если вы хотите, чтобы исключение было выбрано, используйте функцию vector :: at() вместо [].

Смежные вопросы