Co ciekawe, złapałem to w blok try-catch i w release nie ma problemu, wyjątek jest prawidłowo łapany i treść błędu SQL-a także, natomiast taka sytuacja ma miejsce podczas debugowania
W trybie budowania Debug na Visual studio std::vector::operator[]
sprawdza zakres indeksu i rzuca wyjątkiem za pomocą asercji!
Ten wyjątek, to jest nie jest wyjątek C++, więc try catch nic tu nie da, to jest asercja w stylu C, która natychmiast zatrzymuje program.
W trybie budowania release std::vector::operator[]
nie robi sprawdzania i wtedy dostęp do indeksów z poza zakresu jest po prostu Niezdefiniowanym Zachowaniem (może zdarzyć się cokolwiek, w tym nic).
Ergo kq
dobrze ci mówi, masz poważny błąd w programie, który MUSISZ naprawić.
Odpal program z IDE w trybie debugwania (F5) (bo to co pokazujesz to jest normalnie włączony program, który jest zbudowany pod Debug) i jak się pojawi błąd to przeanalizuj Call Stack.
Albo jeśli wolisz swoją metodą, to jak wyskoczy ci to okienko, to wtedy naciśnij "Ponów", zgódź się na debugowanie i wybierz właściwa instancję VS. Wtedy też przeanalizuj Call Stack.
W Visual Studio można ustawić na jakie wyjątki powinien reagować Debugger. Ale to nie jest wyjątek w rozumieniu C++.