Napisałem kod, który napotyka wyjątek, jeśli dane dane wejściowe użytkownika są nieprawidłowe, więc umieściłem je w bloku try/catch, ale wciąż wyrzucałem wyjątek . Sam kod jest dość długi, więc tutaj jest uproszczona wersja kodu, która również napotyka wyjątek. Sam wyjątek jest jasny, pozycja "3" nie istnieje, więc naturalnie wyrzuciłaby wyjątek, ale znajduje się wewnątrz bloku try/catch, więc powinien zostać złapany, ale tak się nie dzieje.Ciągle otrzymuję wyjątek, mimo że kod znajduje się w bloku prób/catch
int main() {
try
{
vector<string> test = vector<string>{ "a","b","c" };
string value = test[3];
}
catch (...)
{
}
}
Uruchomienie tego kodu powoduje następujący wyjątek, niezależnie od tego, czy znajduje się w bloku try/catch.
Próbowałem również z określeniem wyjątek (const out_of_range&e
), ale to nie pomogło. To spowodowało dokładnie ten sam wyjątek.
int main() {
try
{
vector<string> test = vector<string>{ "a","b","c" };
string value = test[3];
}
catch (const out_of_range&e)
{
}
}
Używam Visual Studio, czy może to być problem z IDE lub kompilatorem, którego używa?
Element 3 nie jest elementem wektora. Zamiast tego użyj 2. – Raindrop7
Istnieją różne typy * wyjątków * z systemów komputerowych. Możesz wychwycić tylko te, które są wyrzucane z C++, a nie te, które są spowodowane przez oprogramowanie, system operacyjny lub błędy sprzętowe. Taka awaria wymaga [dowiedz się, jak debugować swoje programy] (https://ericlippert.com/2014/03/05/how-to-debug-small-programs/). –
Co do przyczyny twojego * wypadku * powinieneś wrócić do swoich [książek dla początkujących] (http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list) i przejrzeć je . –