exceptions
-
hi!
wollte mal nachfragen ob es für speicherbereichsverletzungen zb.: array[100], und ich greif auf der 110 element zu...auch sowas wie ::WSAGetLastError() gibt??
cu
-
Nein.
-
Nein, gibt es leider nicht, wäre auch viel zu langsam. Aber wenn du das gerne haben willst, kann man uneingeschränkt std::vector empfehlen. Schau bitte auf meine Homepage unter "Dynamische Arrays" nach:
-
OMG nein!
Bloss nicht dauernd .at() verwenden.lieber selber mit .size() checken ob genug Platz ist - ist ja sonst sinnlose redundanz.
im op[] sollte nur ein assert() sein (falls die STL das nicht hat -> selber einfügen) das ist viel schöner. denn ein zugriff auf ein nicht existentes Element ist ein logikfehler und sollte somit keine exception sein, die man fangen und ignorieren kann. logikfehler gehören eliminiert!finde die ganzen tipps dort nicht so gut
exception sind für laufzeitfehler da und nicht für logikfehler.
und in einem ctor initialisieren wir mit vernünftigen standard werten
und delete 0; ist gültiger code
-
Shade Of Mine schrieb:
OMG nein!
Bloss nicht dauernd .at() verwenden.lieber selber mit .size() checken ob genug Platz ist - ist ja sonst sinnlose redundanz.
im op[] sollte nur ein assert() sein (falls die STL das nicht hat -> selber einfügen) das ist viel schöner. denn ein zugriff auf ein nicht existentes Element ist ein logikfehler und sollte somit keine exception sein, die man fangen und ignorieren kann. logikfehler gehören eliminiert!finde die ganzen tipps dort nicht so gut
exception sind für laufzeitfehler da und nicht für logikfehler.
und in einem ctor initialisieren wir mit vernünftigen standard werten
und delete 0; ist gültiger codehi!
tja ich kann leider keinen std::vector nehmen!! nehmen wir mal an ich hab ein array[100]; und ich will ne exception werfen wenn ich auf das 110 element zugreife, da es diese element nicht gibt -> laufzeitfehler!!cu
-
nike. schrieb:
tja ich kann leider keinen std::vector nehmen!! nehmen wir mal an ich hab ein array[100]; und ich will ne exception werfen wenn ich auf das 110 element zugreife, da es diese element nicht gibt -> laufzeitfehler!!
Warum nicht? vielleicht boost::array?
Ansonsten wird es doof - denn sowas ist halt nur mit ner Klasse möglich, die das Array wrappt.
-
Shade Of Mine schrieb:
nike. schrieb:
tja ich kann leider keinen std::vector nehmen!! nehmen wir mal an ich hab ein array[100]; und ich will ne exception werfen wenn ich auf das 110 element zugreife, da es diese element nicht gibt -> laufzeitfehler!!
Warum nicht? vielleicht boost::array?
Ansonsten wird es doof - denn sowas ist halt nur mit ner Klasse möglich, die das Array wrappt.es geht nicht...hab ein file in den ram gemappt;-) und ein pointer zeigt nun auf das file mapping... verstehst? da bringt mir auch kein boost::array was...wollte nur raus finden ob man speicherzugriffsfehler irgendwie aus der NException, NExpAssert od. NExpError irgendwie bekommt!??
cu
-
Dann bau Dir doch einen wrapper. Mit [] greifste zu und prüfst vorher. gemappte Größe müßte natürlich bekannt sein.
MfG Jester
-
Es gibt in den gängigen Betriebssystemen schon Möglichkeiten, Speicherzugriffsfehler abzufangen. Unter Windows ist das Structured Exception Handling, unter Unix geht's mit signals.
-
Es gibt in den gängigen Betriebssystemen schon Möglichkeiten, Speicherzugriffsfehler abzufangen.
Definiere "Speicherzugriffsfehler". Meinst du acces violations? Das ist ja schön, aber die wird leider nicht ausgelöst, solange ich nur meinen eigenen Speicher vermucke.
Ein Array zu verwenden, dass keine Indexprüfung bietet, ist IMHO sowas von mega-nachteilhaft, dass man es einfach nicht tun sollte. Es spricht nichts gegen ein boost::array mit eingebautem assert, auch nicht die Performance.
Ein normaler Compiler sollte den Wrapper vollständig wegoptimieren können.Und IMHO ist ein std::vector auch nicht so unglaublich lahm, dass man dann doch lieber gleich immer C-Arrays nimmt.
Arrays ohne Indexprüfung sind doof.