РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
586 of 815 menu

Класс bad_alloc

Класс bad_alloc представляет собой исключение, которое выбрасывается при неудачной попытке выделения динамической памяти. Оно наследуется от класса exception и находится в заголовочном файле <new>.

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

Класс не имеет собственных параметров, однако наследует метод what от базового класса exception, который возвращает строку с описанием ошибки.

Синтаксис

#include <new> class bad_alloc : public exception { // ... };

Пример

Давайте попробуем выделить огромный объем памяти и перехватим исключение bad_alloc:

#include <iostream> #include <new> using namespace std; int main() { try { long long size = 1000000000000LL; int* arr = new int[size]; delete[] arr; } catch (bad_alloc& e) { cout << "Caught: " << e.what() << endl; } return 0; }

Результат выполнения кода:

"Caught: std::bad_alloc"

Пример

Давайте используем версию оператора new, которая не выбрасывает исключение, а возвращает nullptr при неудаче:

#include <iostream> #include <new> using namespace std; int main() { long long size = 1000000000000LL; int* arr = new (nothrow) int[size]; if (arr == nullptr) { cout << "Allocation failed" << endl; } else { cout << "Allocation ok" << endl; delete[] arr; } return 0; }

Результат выполнения кода:

"Allocation failed"

Смотрите также

  • ключевое слово throw,
    которое выбрасывает исключение
  • оператор try,
    который начинает блок обработки исключений
  • оператор catch,
    который перехватывает исключение
  • класс exception,
    который является базовым для всех исключений
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить