Исключительная ситуация, генерируемая оператором new



Следует отметить, что некоторые компиляторы поддерживают генерацию

исключений в случае ошибки выделения памяти посредством оператора new, в частности исключения типа bad_alloc. Оно может быть перехвачено и необходимым образом обработано. Ниже в программе рассмотрен пример генерации и обработки исключительной ситуаций bad_alloc. Искусственно вызывается ошибка выделения памяти и перехватывается исключительная ситуация.

#include <new>

#include <iostream>

using namespace std;

int main()

{ double *p;

try{

while(1) p=new double[100]; // генерация ошибки выделения памяти

}

catch(bad_alloc exept) { // обработчик xalloc

cout<<"Возникло исключение"<<exept.what()<<endl;

}

return 0;

}

В случае если компилятором не генерируется исключение bad_alloc, то

можно это исключение создать искусственно:

#include <new>

#include <iostream>

using namespace std;

int main()

{ double *p;

bad_alloc exept;

try{

if(!(p=new double[100000000])) // память не выделена p==NULL

throw exept; // генерация ошибки выделения памяти

}

catch(bad_alloc exept) { // обработчик bad_alloc

cout<<"Возникло исключение "<<exept.what()<<endl;

}

return 0;

}

Результатом работы программы будет сообщение:

Возникло исключение bad allocation

Оператор new появился в языке C++ еще до того, как был введен механизм обработки исключительных ситуаций, поэтому первоначально в случае ошибки выделения памяти этот оператор просто возвращал NULL.


Дата добавления: 2015-12-21; просмотров: 18; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!