Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
soican
49 / 23 / 1
Регистрация: 16.11.2011
Сообщений: 329
Записей в блоге: 5
#1

Грамотно обработать ошибку std::exception - C++

07.02.2014, 00:38. Просмотров 427. Ответов 3
Метки нет (Все метки)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
struct Node
{
    Node(int data): data_(data) {}
    int data_; // полезная часть списка
    Node* next; // указатель на следующий элемент
    Node* operator[](int pos)
    {
      Node* xptr = this;
      for (int i = 0; i < pos; ++i)
      {
       if ( xptr->next != nullptr)
        xptr = xptr->next;
       else
        std::cerr << "Out of Range error: " << std::endl;
      }
      return xptr;
    }
};
Node* toList(const std::vector<int>& array) //(int array[], size_t n) создаем список из вектора
{    Node* list = nullptr;
    for (size_t i = 0; i != array.size(); ++i)
        list = prepend(list, new Node(array[i]));
    return list;
}
Никогда не работал раньше с обработчиком ошибок, вот хочу начать.
Допустим
C++
1
2
3
int mas[] = {10, 20, 30, 40};
std::vector<int> vec(mas, mas + sizeof(mas)/sizeof(int) );
Node* spisok = toList(vec);
Вот пишу
std::cout << (*spisok)[3]->data_; - работает
std::cout << (*spisok)[100]->data_; - как сделать, чтоб грамотно все выдовало через std::exception, а то в моём варианте вернет последний узел и нафигачит "Out of Range error: "

Добавлено через 6 минут
C++
1
2
3
4
5
Node* prepend(Node* list, Node* node) // вставляет узел в голову, возвращает указатель на голову
{  if (node != nullptr)
        node->next = list;
    return node ? node : list;
}
Добавлено через 4 часа 0 минут
кстати, а какой вид ошибки будет при nullptr->?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.02.2014, 00:38
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Грамотно обработать ошибку std::exception (C++):

Выдаёт ошибку "Unhandled exception at 0x00007F exception: std::bad_alloc in memory location" - C++
Добрый день, друзья не могли бы помочь разобраться, почему выдаёт такую ошибку? Вот #include &lt;iostream&gt; #include &quot;kmath.h&quot; ...

Как грамотно сконвертировать float в std::wstring? - C++
:) ?

Вылетает на std::length_error exception - C++
название не очень отражает суть вопроса, но лучше я предумать не смог. Есть программа собранная в дебаге (-g) к ней линкуется только одна...

Ошибка при работе с std::exception* - C++
Почему в случаях 1 и 3 выводится нормальный e.what(), а во втором - ошибочный? Как это исправить? #include &lt;iostream&gt; #include...

Не получается перехватить исключение, унаследованное от std::exception - C++
#include &lt;iostream&gt; #include &lt;stdexcept&gt; #include &lt;sstream&gt; using namespace std; class BadInt : exception { ...

Создание своего класса исключений, наследование std::exception - C++
хотел создать свой класс исключений пронаследовав от std::exception, но немного запутался в конструкторах... конструктор же не наследуется,...

3
0x10
2465 / 1637 / 241
Регистрация: 24.11.2012
Сообщений: 4,041
07.02.2014, 05:37 #2
Цитата Сообщение от soican Посмотреть сообщение
как сделать, чтоб грамотно все выдовало через std::exception
C++
1
2
3
4
if (xptr->next != nullptr)
    xptr = xptr->next;
else
    throw std::out_of_range("custom message");
http://www.cplusplus.com/reference/stdexcept/out_of_range/
0
gray_fox
07.02.2014, 06:30
  #3

Не по теме:

soican, вообще плохая идея с оператором индексации для списка - линейная сложность всё таки...

0
soican
49 / 23 / 1
Регистрация: 16.11.2011
Сообщений: 329
Записей в блоге: 5
07.02.2014, 15:46  [ТС] #4
Цитата Сообщение от gray_fox Посмотреть сообщение
soican, вообще плохая идея с оператором индексации для списка - линейная сложность всё таки...
я его использую как вспомогательный для создания начальных условий для выполнения учебных заданий
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.02.2014, 15:46
Привет! Вот еще темы с ответами:

mingw32, SEH, std::exception, setjmp/longjmp, signal - C++
Начал разбираться с вопросом - как понял - есть несколько вариантов: (в порядке обнаружения мною) 1) LibSEH - работает. ...

Ошибка при написании класса: Unhandled exception std::bad_alloc at memory location - C++
ПИшу свой клас Var, проблема в следующем из-за строчки first = first+1; вылетает ошибка Unhandled exception at at 0x760FB727 in...

Разъясните код пжлст(выдает ошибку:cannot convert from 'class std::list<class c_bullet *,class std::allocator<class c_bullet *> >::iterator' to 'int') - C++
Есть такие строки: std::list&lt;c_bullet*&gt; Bullets; ... for(auto i = Bullets.begin(); i != Bullets.end(); /**/) В строке цикла вот...

Не воспринимает ни std::cout, ни std::cin. Вобщем ничего из std. Также не понимает iostream - C++
Здравствуйте! Я хотел начать изучать язык C++. Набрал литературы. Установил Microsoft Visual C++ 2005 Express Edition. Образ диска...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Yandex
Объявления
07.02.2014, 15:46
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru