Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.81/42: Рейтинг темы: голосов - 42, средняя оценка - 4.81
0 / 0 / 0
Регистрация: 08.04.2010
Сообщений: 10
1

Обработка исключений для new

08.04.2010, 21:41. Просмотров 8430. Ответов 41
Метки нет (Все метки)

Всем привет!
Вопрос следующий. Когда функция new не может выделить память, то генериться исключение bad_alloc.
Допустим есть следующий код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
     
       char* p;
       try
       {   for(int i = 0; i < 20; i++)
        {   p = new char[614400000U];
        cout <<  i << ":success of allocation " << endl;
        }
    }
    catch(bad_alloc)
    {    cout <<  "Allocation failure " << endl;
          abort();
    }
На каком то i шаге память закончится, сгенериться bad_alloc и мы попадем в блок catch()
А вот другой пример:
C++
1
2
3
4
5
6
7
8
9
10
11
12
     
       char* p;
       try
       {   for(int i = 5; i > -5; i--)
        {   p = new char[i];
        cout <<  i << ":success of allocation " << endl;
        }
    }
    catch(bad_alloc)
    {    cout <<  "Allocation failure " << endl;
          abort();
    }
При отрицательном i, никакой обработки исключения не происходит, программа вываливается.
Вопрос: как в этом случае ведет себя new и как попасть в блок catch()?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.04.2010, 21:41
Ответы с готовыми решениями:

Обработка исключений с пмощью структурированной обработки исключений
Есть функция, которая определенным образом работает с файлами,но при работе с файлами &quot;не...

Обработка исключений в классах для пользовательских типов
Здорова господа! Запустил токо класс String тестю и тут у меня вылетело исключение выход за...

Обработка исключений
Объясните мне толком для чего используются эти обработки исключений (Try, catch, throw). Сколько...

Обработка исключений
Нужно сделать ввод часов и минут с клавиатуры и сгенерировать исключения в мейне. как понимаю...

41
Эксперт С++
2919 / 1268 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
10.04.2010, 22:52 41
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
CheshireCat прав в случае невозможности создать работоспособный объект, конструктор должен выкинуть исключение, просто нужно аккуратно следить за объектами, которые конструктор создает динамически, либо использовать для них обертки.
А техника такого действия очень несложна; она хорошо описана у уважаемого Херба Саттера в его "Решение сложных задач на C++" и "Новые сложные задачи на C++".
2
CyBOSSeR
10.04.2010, 23:04     Обработка исключений для new
  #42

Не по теме:

CheshireCat, спасибо за упоминание литературы.

0
10.04.2010, 23:04
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.04.2010, 23:04
Привет! Вот еще темы с ответами:

обработка исключений
Здравствуйте. В следующем коде, при запуске throw выдает ошибку &quot;Exception object adress&quot;. Не...

Обработка исключений
Помогите написать программу пожалуйста!!!! Я незнаю как правильно написать!!! Задание: Для...

Обработка исключений
Почему не перехватывает ошибку и не выводит Error? а прога сама прекращает работу. #include...

Обработка исключений
Есть вопрос по заданию. С клавиатуры вводится номер ошибочной ситуации. В зависимости от того,...


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

Или воспользуйтесь поиском по форуму:
42
Ответ Создать тему
Опции темы

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