Вектор выходит за пределы без ошибок

У меня есть std::vector. Я проверяю его размер, который равен 6, но когда я пытаюсь получить доступ к vec[6], чтобы проверить, не даст ли он ошибку, я получаю ошибку, но вместо этого номер. Должна ли она давать ошибку?

изменить: что-то вроде:

struct Element
{
    std::vector<double> face;
};

int main()
{
    Element elm;

    .... // insert 6 elements into elm.face

    std::cout << elm.face.size() << std::endl; // answer is 6
    std::cout << elm.face[6] << std::endl; // answer is some number
}

Ответ 2

Как указано в ответе kgraney, это поведение undefined. Тем не менее, большинство библиотек С++ имеют некоторые возможности для отмены или создания исключения в таких случаях. Обычно контролируется установкой или отключением определенных макросов компилятора.

Я сделал обзор соответствующей документации:

gnu libstdС++

clang libcxx

бустера

Microsoft

Обратите внимание, что gnu и clang отключают проверки по умолчанию, а microsoft - по умолчанию. Если вы не знаете об этом, ваш код может работать значительно медленнее в режиме отладки в системе Microsoft.

Ответ 3

Это поведение undefined. Поведение undefined не обязательно означает, что вы получите ошибку: вы можете, но вместо этого вы можете получить некоторый результат, который не имеет большого смысла.

Ответ 4

Структуры данных индексируются начиная с 0, поэтому, если вы обращаетесь к vec [6], то это будет за пределами границ. Вероятно, вы не получите ошибку из-за проблемы с памятью; там может быть что-то из предыдущего кода, который вы выполнили, или какой-либо подобной ошибки. Пожалуйста, отправьте код.