Страницы

Поиск по вопросам

четверг, 19 декабря 2019 г.

Исключение std::bad_alloc для 2 элементов

#cpp #исключения #gcc


Почему следующая программа выбрасывает исключение std::bad_alloc?

int main() {
    std::vector delimiters = {",", ";"};
    std::cout << delimiters[0];
}

    


Ответы

Ответ 1



У Вас очень занятный пример получился. Вот в этой строчке: std::vector delimiters = {",", ";"}; происходит попытка создать вектор из двух итераторов, т.к. это единственный подходящий конструктор, который компилятору удаётся распознать в этой инициализации: {",", ";"}. Т.к. компилятор считает, что ему дают 2 итератора, то он и пытается с ними работать, но на деле это 2 независимых указателя, работа с которыми даёт неопределённое поведение! Вот поэтому Вы и видите исключение. Компилятор, скорее всего, честно вычел из второго указателя первый, получил какое-то огромное число, попытался выделить и получил std::bad_alloc.

Ответ 2



Потому что вы говорите о char, а передаете строки... std::vector delimiters = {',', ';'};

Комментариев нет:

Отправить комментарий