C ++ std :: out_of_range прерван (ядро сброшено) - PullRequest
0 голосов
/ 07 марта 2020

У меня есть следующий код (есть еще этот код, например push_back () и insert (), но я вырезал их для релевантности:

// In header file for class:
template <typename T>
class MyVector
{
  private: 
    T *m_data = nullptr; // Dynamic array or vector
    int reserved_size;   // Current max size of reserved_size
    int data_size;       // Current size of array
  public: 
    T & at(int index);
}

// In .hpp file for class
template <typename T> 
T & MyVector<T>::at(int index)
{
  if(index >= data_size)
    throw std::out_of_range ("Index out of range!");
  return m_data[index]
}

// In main
int main()
{
  MyVector<int> x;
  x.push_back(1);
  x.push_back(2);
  // Max size of the array here would be 5 and you're trying to access index 10
  x.at(10);
  // Should throw an error here
}

Проблема в том, что когда я запускаю код, который он выводит: 'terminate вызывается после создания экземпляра' std :: out_of_range 'Aborted (core dumped)'

Массив заполнен 5 значениями: 1,2,3,4,5, а максимальный размер установлен в 10. Я звоню в (20), который явно не входит в индекс моего массива m_data. Я не знаю, в чем проблема, которая вызывает дамп ядра здесь. РЕДАКТИРОВАТЬ: я знаю, что на данный момент мне не хватает поймать для броска Как бы я go о добавлении этого? Я знаю, как сделать блоки try-catch для определенных вещей, но не для перехвата исключения std :: out_of_range.

Указания для этого назначения говорят, что это должно бросить исключение std :: out_of_range, когда выход за пределы, поэтому избежать обработки исключений здесь невозможно.

1 Ответ

2 голосов
/ 07 марта 2020

Я не уверен, что ваш вопрос, потому что кажется, что вы уже знаете о решении, то есть поймать std::out_of_range exception в вашем звонящем. Если исключение не перехвачено какой-либо функцией во время разматывания стека, то std::terminate будет вызываться при main().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...