Вступить в клуб →
средняявопросЯзык C/C++ и работа с памятью

Указатель на элемент vector после push_back

std::vector<int> v{1, 2, 3};
int *p = &v[0];
v.push_back(4);
std::cout << *p << "\n";

Код собран без предупреждений и в отладочной сборке печатает 1. На другой машине он печатает произвольное число, а под санитайзером падает. Какое утверждение верно?

  • Всегда печатается 1: добавление элемента в конец не меняет ни значение, ни расположение первого элемента
  • push_back может перевыделить буфер, и тогда p указывает на освобождённую память — поведение не определено
  • Печатается 4: push_back сдвигает уже имеющиеся элементы к началу буфера, а новый кладёт на освободившееся место
  • Код не соберётся: брать адрес элемента vector нельзя, operator[] возвращает временный объект

🔒 Проверка ответа — для участников клуба

  • Проверка ответа
  • Подсказка, если застряли
  • Разбор с объяснением, почему так
  • Прогресс по всем задачам и виртуальные собеседования
Зарегистрироваться →

Регистрация занимает минуту

Другие задачи раздела