Griff Zugriffsverletzung-Ausnahme in C++ Builder?
Ich versuche zu tun:
try{
int * i = NULL;
*i = 3;
}catch(Exception &Err){
ShowMessage(Err.Message);
}
Ich aber, dass dieses fangen sollte Zugriffsverletzung Ausnahme, und Griff es durch die Anzeige einer Fehlermeldung.
Aber aus irgendeinem Grund bekomme ich einfach
Zugriffsverletzung
Meldung anstelle der vollen
Zugriffsverletzung XXX in Modul YYY. Schriftlich unter der Adresse ZZZ.
BTW ExceptObject()
routine gibt NULL zurück, für einige seltsame Grund.
Was vermisse ich hier?
Sie sehen nur "den Zugang Vialotion", denn das ist der Weg, wie es funktionieren soll. Die RTL nicht speichern Sie die gesamte Ausnahme der Daten in den EAccessViolation Objekt erhält geworfen. Für ExceptObject(), Sie hat nicht gesagt, welche version von C++Builder, die Sie verwenden. ExceptObject() und ExceptAddr() bekannt sind, werden buggy in älteren Versionen von C++.
InformationsquelleAutor | 2009-06-05
Du musst angemeldet sein, um einen Kommentar abzugeben.
Finden Sie in der MSDN-blog-Eintrag auf Mischen SEH-und C++ - Ausnahmen. Das sind zwei verschiedene Arten von Ausnahmen. Versuchen zu fangen eine strukturierte Ausnahme, erzeugt durch das Betriebssystem, wie eine C++ - Ausnahme ist nicht der richtige Weg aus der box.
Temperament dieses bit mit dieses posting auf, dies nicht zu tun.
Fangen Zugriffsverletzungen kann ein schönes Ziel-aber etwas, möchten Sie vielleicht zu tun, im Rahmen des debugging nur. Fang Zugriffsverletzungen (oder anderen wichtigen Ausnahmen) in der Produktion-code und versuchen, Sie zu behandeln, ist selten Resultat dessen korrekten Betrieb.
InformationsquelleAutor Kris Kumler
In BCB5, dass man eine EAccessViolation Werke, z.B.:
Beachten Sie, dass class_name ist spezifisch für dieses Projekt und sollte wahrscheinlich ersetzt werden durch AnsiString(this->ClassName) oder weggelassen. Auch habe ich eingeschaltet Sie diesen code anmelden, der automatisch an eine Datenbank, zeigt eine MessageBox. Ich habe gerade wrap-code, wo ich beobachtet habe AVs in ein AV_TRY ... AV_CATCH.
InformationsquelleAutor insignis
C++ - Standard nicht spezifiziert, dass die Dereferenzierung eines NULL-Zeiger ist, wird eine Ausnahme - Sie sagt, es Ergebnisse in ein Undefiniertes Verhalten. Auf Windows-Plattformen, das Wasser ist verschmutzt etwas von Windows Strukturierte Ausnahmebehandlung. Das hat nichts mit C++ - exception-handling, mit der Ausnahme, dass einige C++ - run-Zeiten können diese übersetzen excptions in C++ - Ausnahmen. Jedoch code, hängt davon ab, wie übersetzungen ist nicht tragbar.
InformationsquelleAutor
Können Sie jedoch verwenden die structured exception handling (SEH) zu fangen, werden alle C++ - Ausnahmen. Da C++ - Ausnahmen sind einfach eine Klasse basierte Implementierung basiert auf SEH.
InformationsquelleAutor ralphtheninja