STL исключения не выбрасываются Visual Studio 2015 Community Edition - PullRequest
0 голосов
/ 05 мая 2018

Этот код определенно должен генерировать исключение «векторный индекс вне диапазона» во всплывающем диалоговом окне. Но абсолютно ничего не происходит.

std::vector<int> x;
for (int i = 0; i < 4; ++i)
    x.pop_back();

Я пытался включить исключения C ++ через Debug->Windows->Exception Settings, но это не помогло ...

Что может быть причиной этого?

Почему исключения отключены в Visual studio 2015?

Редактировать : Мой вопрос остается прежним, но для этого кода:

std::vector<int> x;
std::cout << x.at(3) << '\n';

Редактировать 2 Полный код:

#include <iostream>
#include <vector>

int main()
{
    std::vector<int> x;
    x.at(3) = 123;
    return 0;
}

ничего не выброшено, но ссылка говорит, что должно выбрасывать

Ответы [ 3 ]

0 голосов
/ 05 мая 2018

За 1001 * стоит заплатить fast , и это означает, что не все можно проверить во время выполнения. Особенно в циклах проверка на каждом доступе замедлит процесс.

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

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

0 голосов
/ 05 мая 2018

Проект строится с другой библиотекой времени выполнения для связывания.

Решение: C / C ++ -> Генерация кода-> Библиотека времени выполнения: изменено на Многопоточную отладку (/ MTd)

0 голосов
/ 05 мая 2018

Почему pop_back должен выдавать исключение 100

Вызов pop_back для пустого контейнера не определен.

Так что Неопределенное поведение . Конечно, это не нужно бросать.

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