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

201
16 апреля 2019, 11:10

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

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

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

Вот поэтому Вы и видите исключение. Компилятор, скорее всего, честно вычел из второго указателя первый, получил какое-то огромное число, попытался выделить и получил std::bad_alloc.

Answer 2

Потому что вы говорите о char, а передаете строки...

std::vector<char> delimiters = {',', ';'};
READ ALSO
Как создать ветвление в std::vector?

Как создать ветвление в std::vector?

Я хочу создать вот такую

232
Java распарсить JSON с глубокой вложенностью

Java распарсить JSON с глубокой вложенностью

Нужно распарсить такой сложный JSON:

252
Как перемесить изображение?

Как перемесить изображение?

Нужно,что бы при выборе изображения оно перемещалось в корневую папку программы, как это можно реализовать ? Пытался через Filescopy и Files

222
Абстрактный класс или интерфейс?

Абстрактный класс или интерфейс?

У меня имееться два подобных класса LowPathFilter и HighPathFilter

203