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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ рядки http://www.cyberforum.ru/cpp-beginners/thread114457.html
помогите зделать прогу которая сделает выравнивание по правому краю введенного текста для чего в каждой строке использовать функцию WIDE(str.k) Добавлено через 2 часа 33 минуты помогите пожалуйста.
C++ Сортировка C++ Доброго времени суток. Помогите пожалуйста отсортировать массив структур любыми 2-мя способами (сорт. пузырьком, сорт. вставками, сорт. выбора) одним способом сортировка по цене, вторым по номеру. #include <iostream.h> #include <conio.h> struct bd { char name ; float price; float number; } st ; http://www.cyberforum.ru/cpp-beginners/thread114431.html
C++ Производительность
Подскажите, где или что почитать о том, как писать БЫСТРЫЕ программы? (про разработку высоконагруженных программ). Копаюсь в интернете - но нахожу крупицы... И всё бессистемно. Спасибо.
C++ Конструкторы классов
Схематично: class A {public: A() {}//конструктор А . . . //методы класса А } class B: public A {public: B() {}//конструктор B
C++ Массив http://www.cyberforum.ru/cpp-beginners/thread114405.html
Помогите переделать в функцию плз а то не получается( #include <iostream> #include <conio.h> #include <ctime> using namespace std; int main() {
C++ Переполнение стека Хочу полюбопытствовать. Вычитал недавно, что на стек выделяется ограниченная область памяти, и в языке Си это 4 Кб. Вопрос: Если мне нужно будет работать со стеком, и определять его непосредственно через линейный список, то, как мне задать ту грань, за которую бы не позволяла программа пользователю переходить? И еще один: Когда идёт процесс очистки стека, следует освобождать каждый узел, или... подробнее

Показать сообщение отдельно
paramonies
0 / 0 / 0
Регистрация: 08.04.2010
Сообщений: 10

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

08.04.2010, 21:41. Просмотров 4740. Ответов 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()?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru