Try.. catch ?
-
Hallo,
Der unten angegebene code steht in einer endlosschleife.
ich versuche per:
//while Schleife beginnt vor diesem Code try { cout << vPaCmd[1]; } catch (int EX) { cout << "Error: " << EX << "\n\n"; }mögliche fehler abzufangen und falls einer auftritt die schleife neuzustarten.
vPaCmd ist ein char* array und wird vor der schleife mit diversen werten per push_back() befüllt.
Diese entstehen durch eine gesplittete(strtok) eingabe des benutzers.Falls jedoch vPaCmd[1] nicht existiert wird der fehler dennoch nicht abgefangen und mein programm verabschiedet sich?
Ich weiß man könnte die größe des arrays vor der ausgabe überprüfen, dennoch möchte ich verstehen warum try..catch hier nicht funktioniert

-
try-catch fängt afaik nur Exceptions, die mit throw geworfen wurden, keine Zugriffsverletzungen und ähnliche Fehler.
-
CStoll schrieb:
try-catch fängt afaik nur Exceptions, die mit throw geworfen wurden, keine Zugriffsverletzungen und ähnliche Fehler.
Können zugriffsverletzungen auch abgefangen werden?
-
Da du push_back verwendest, gehe ich davon aus, dass du damit einen Container der Stl bearbeitest:
#include <iostream> #include <vector> #include <stdexcept> int main() { std::vector<int> v(10); for(size_t i=0;i<v.size();++i) v[i] = i; try { size_t i=0; for(;i<v.size();++i) { // der Indexzugriff ist garantiert sicher std::cout << v[i] << '\n'; } std::cout << v.at(i) << '\n'; // at wirft im Ggs. zum operator [] eine exception } catch(std::out_of_range& e) { std::cout << e.what() << "\n"; } }
-
yahendrik schrieb:
Da du push_back verwendest, gehe ich davon aus, dass du damit einen Container der Stl bearbeitest:
#include <iostream> #include <vector> #include <stdexcept> int main() { std::vector<int> v(10); for(size_t i=0;i<v.size();++i) v[i] = i; try { size_t i=0; for(;i<v.size();++i) { // der Indexzugriff ist garantiert sicher std::cout << v[i] << '\n'; } std::cout << v.at(i) << '\n'; // at wirft im Ggs. zum operator [] eine exception } catch(std::out_of_range& e) { std::cout << e.what() << "\n"; } }Danke funktioniert!
Mir ist gerade aufgefallen das ich char* array statt vector geschrieben hab
