Программисты больше не нужны!
Нужны ИИ инженеры! Хотите научиться? Вступайте в канал!
595 of 824 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 для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить