std :: bad_alloc присваивает указатель по адресу ссылки

По какой-то причине я получил код, который выглядел так

typedef std::vector<double> Vector;
void f(Vector const& v) {
Vector const* p;
p = &v;
}

Это кидает bad_alloc исключение в пункте назначения. Зачем? Имеет ли значение, что f был вызван на не приведенный вектор? Это C ++ 03, скомпилированный на gcc 4.1.

** Редактировать **
Это внутри некоторого кода, работающего внутри Google Mock, что я вижу исключение. Я пытался вырвать код и скомпилировать его отдельно, и он работал нормально. Смотря дальше

** Дальнейшее редактирование **
Таким образом, проблема была в том, что присваивание происходило в последней строке конструктора объекта, который сам был членом другого объекта. Следующим объектом в списке инициализатора родительского объекта было то, откуда пришло исключение, но GDB заставил его выглядеть так, как будто это происходило в последней строке конструктора предыдущего объекта, где происходило это назначение. Спасибо за все отрицательные отзывы, чтобы напомнить мне, насколько ошибочным был вопрос.

-3

Решение

Нет никакого способа, которым код может поднять std::bad_alloc исключение (или любое другое исключение, в этом отношении), поскольку все, что вы делаете, это присваиваете значение указателя переменной указателя. std::bad_alloc поднимается new а также new[] операторы, когда выделение памяти не удается, и в этом коде такое выделение памяти не выполняется.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]