Namespaces
Variants

std::bad_array_new_length

С ru.cppreference.net
 
 
Библиотека утилит
Поддержка языка
Поддержка типов (базовые типы, RTTI)
Макросы проверки функций библиотеки (C++20)
Программные утилиты
Функции с переменным числом аргументов
Поддержка корутин (C++20)
Поддержка контрактов (C++26)
Трёхстороннее сравнение
(C++20)
(C++20)(C++20)(C++20)    
(C++20)(C++20)(C++20)

Общие утилиты
Операторы отношений (устарело в C++20)
Функции сравнения целых чисел
(C++20)(C++20)(C++20)    
(C++20)
Обмен и операции с типами
(C++14)
(C++11)
(C++11)
(C++11)
(C++17)
Общеупотребительные типы-словари
(C++11)
(C++17)
(C++17)
(C++17)
(C++11)
(C++17)
(C++23)



 
Библиотека управления памятью
Аллокаторы
Ресурсы памяти
Неинициализированное хранилище (до C++20*)
Поддержка сборщика мусора (до C++23)
 
 
Определён в заголовке <new>
class bad_array_new_length;
(начиная с C++11)

std::bad_array_new_length — тип объекта, выбрасываемого в качестве исключения выражениями new-expressions для сообщения о недопустимой длине массива, если

  1. Длина массива отрицательна,
  2. Общий размер нового массива превышает определённое реализацией максимальное значение,
  3. Количество инициализаторов превышает количество элементов для инициализации.

Исключение может генерировать только первая размерность массива; размерности, отличные от первой, являются константными выражениями и проверяются во время компиляции.

cpp/error/exceptioncpp/memory/new/bad alloc

Диаграмма наследования

Функции-члены

(constructor)
создает новый объект bad_array_new_length
(public member function)
operator=
заменяет объект bad_array_new_length
(public member function)
what
возвращает поясняющую строку
(public member function)

std::bad_array_new_length:: bad_array_new_length

bad_array_new_length ( ) noexcept ;
(1) (начиная с C++11)
(constexpr начиная с C++26)
bad_array_new_length ( const bad_array_new_length & other ) noexcept ;
(2) (начиная с C++11)
(constexpr начиная с C++26)

Создает новый объект bad_array_new_length с определенной реализацией нуль-терминированной строкой байтов, доступной через what() .

1) Конструктор по умолчанию.
2) Конструктор копирования. Если * this и other оба имеют динамический тип std::bad_array_new_length , то std:: strcmp ( what ( ) , other. what ( ) ) == 0 .

Параметры

other - другой объект исключения для копирования

std::bad_array_new_length:: operator=

bad_array_new_length & operator = ( const bad_array_new_length & other ) noexcept ;
(начиная с C++11)
(constexpr начиная с C++26)

Присваивает содержимое объекта other . Если * this и other оба имеют динамический тип std::bad_array_new_length , то после присваивания std:: strcmp ( what ( ) , other. what ( ) ) == 0 .

Параметры

other - другой объект исключения для присваивания

Возвращаемое значение

* this

std::bad_array_new_length:: what

virtual const char * what ( ) const noexcept ;
(начиная с C++11)
(constexpr начиная с C++26)

Возвращает пояснительную строку.

Возвращаемое значение

Указатель на определяемую реализацией нуль-терминированную строку с пояснительной информацией. Строка подходит для преобразования и отображения как std::wstring . Гарантируется, что указатель остается действительным по крайней мере до тех пор, пока не будет уничтожен объект исключения, из которого он получен, или пока не будет вызвана неконстантная функция-член (например, оператор присваивания копированием) для объекта исключения.

Возвращаемая строка кодируется с использованием обычного литерального кодирования во время константной оценки.

(начиная с C++26)

Примечания

Реализациям разрешено, но не требуется, переопределять what() .

Унаследовано от std:: bad_alloc

Унаследовано от std:: exception

Функции-члены

[virtual]
уничтожает объект исключения
(виртуальная публичная функция-член std::exception )
[virtual]
возвращает поясняющую строку
(виртуальная публичная функция-член std::exception )

Примечания

Макрос тестирования возможностей Значение Стандарт Возможность
__cpp_lib_constexpr_exceptions 202411L (C++26) constexpr для типов исключений

Пример

Три случая, когда должно выбрасываться исключение std::bad_array_new_length :

#include <climits>
#include <iostream>
#include <new>
int main()
{
    try
    {
        int negative = -1;
        new int[negative];
    }
    catch (const std::bad_array_new_length& e)
    {
        std::cout << "1) " << e.what() << ": negative size\n";
    }
    try
    {
        int small = 1;
        new int[small]{1,2,3};
    }
    catch (const std::bad_array_new_length& e)
    {
        std::cout << "2) " << e.what() << ": too many initializers\n";
    }
    try
    {
        long large = LONG_MAX;
        new int[large][1000];
    } 
    catch (const std::bad_array_new_length& e)
    {
        std::cout << "3) " << e.what() << ": too large\n";
    }
    std::cout << "End\n";
}

Возможный вывод:

1) std::bad_array_new_length: negative size
2) std::bad_array_new_length: too many initializers
3) std::bad_array_new_length: too large
End

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

функции выделения памяти
(функция)
исключение, выбрасываемое при неудачном выделении памяти
(класс)