Почему при вызове std :: vector :: back () происходит сбой моей программы? - PullRequest
6 голосов
/ 19 января 2012

Я не уверен, что не так с этим кодом:

std::vector<int> myVector(0);

if (myVector.back() == 12)
    myVector.push_back(12);

Кажется, что вызов back () для пустого вектора приводит к сбою программы.

Я не понимаю, почему он падает? Нужно ли проверять длину вектора перед вызовом back()? или возможно что это баг?

В документации сказано, что если вектор пуст, он возвращает неопределенное значение.

Ответы [ 2 ]

13 голосов
/ 19 января 2012

нужно ли проверять длину вектора перед обратным вызовом ()?

Одним словом: да. Это ваша ошибка, ваш вектор пуст, поэтому нет элемента "назад".

В документации должно быть сказано (если вообще что-то сказано), что вызов back() для пустого вектора вызывает неопределенное поведение , но не возвращает неопределенное значение.

6 голосов
/ 19 января 2012
Стандарт

c ++ 11 говорит об этом:

23.3.2.8 / 3

Эффект вызова front () или back () для массива нулевого размера не определен.

Поскольку поведение не определено, может произойти все что угодно.Тебе повезло, что ты потерпел крах.

...