Unhandleld Exception trotz try catch
-
Die NULL abfrage ist bereits drinn aber dadurch dass er nicht initialisiert wird zeigt er irgendwo hin ( in meinem fall auf die Speicheradresse 0x0..0f )
Gib es eine möglichkeit Pointer's zu validieren, um solche fehler zu erkennen?
-
Speeedy schrieb:
Die NULL abfrage ist bereits drinn aber dadurch dass er nicht initialisiert wird zeigt er irgendwo hin ( in meinem fall auf die Speicheradresse 0x0..0f )
Hä? Dann setz ihn doch einfach auf null! Dann zeigt er nicht mehr "irgendwo" hin
Speeedy schrieb:
Gib es eine möglichkeit Pointer's zu validieren, um solche fehler zu erkennen?
Was meinst du mit "validieren"?
-
Speeedy schrieb:
...aber dadurch dass er nicht initialisiert wird ...
Herrje, wenn man schon rohe Zeiger verwendet, dann immer initialisieren!
-
Speeedy schrieb:
Gib es eine möglichkeit Pointer's zu validieren, um solche fehler zu erkennen?
Einfach auf
NULLsetzen, und man erkennt den ungültigen Zeiger.
-
Wir steigen momentan von VS6 auf VS8 (2005) um und erst im VS8 stellten wir dies fest. Im VS6 zeigten die Zeiger immer auf eine gewisse Addresse (Fragt mich nicht warum...!)
Auf null setzen würd ich ja gerne aber da hätt ich wohl schon fast Monate um alles zu überprüfen und es kämen sicher immer wieder neue...
Gibts nicht eine andere möglichkeit? (z.b. VS oder zusätzliche Software die das überprüft..?)
-
Speeedy schrieb:
Wir steigen momentan von VS6 auf VS8 (2005) um und erst im VS8 stellten wir dies fest. Im VS6 zeigten die Zeiger immer auf eine gewisse Addresse (Fragt mich nicht warum...!)
Weisst Dus nicht oder willsts Dus nicht sagen?
Könnte sein, dass Du im Debugging Mode bist und desshalb alle Variabeln und Zeiger Initialisiert (bzw. gekennzeichnet mit einem spezial Pattern) sind.Simon
-
Mir wäre nichts bekannt. Wenns so wäre würde dies von VS oder einen externen komponenten kommen, was mich dann wiederum wundern würde warum das in der neuen version nicht mehr der fall wäre.
Aber ich prüf dies sicher mal nach.
-
Speeedy schrieb:
Hallo C++ler
Ich arbeite momentan an einem Projekt in C++ native (ohne clr support) im VS2005.
Durch fälschliche Initialisierung eines Pointers bekomm ich im Programm einen Pointer auf 0x0000f (oder so ähnlich).
Auf den wird im Progrogramm zugegriffen was zu einer exception führt. Die exception ist: Unhandeld exception at..... Access violation reading location 0x.... und wird in einer externen dll (release) geworfen.
Jedoch befindet sich alles in einem try {} catch(...){} block, aber trotzdem kann ich den code nicht weiter ausführen!
Warum wird diese Exception nicht im catch behandelt?MFG Speeedy
Das ist einne hardware exception und du behandelst nur software exceptions.
Davon mal abgesehen macht es keinen Sinn zu versuchen dein Programm zu retten weil du Fehler bei der Programmierung gemacht hast. Ich persönlich versuche alles unbehandelte einfach durch fallen zu lassen und catche nur was ich auch erwarte. Zusätzlich hab ich auf Windows einen handler im Program registriert der bei unbehandelten exceptions jeglicher art aufgerufen wird und mir einen dump schreibt. In den meisten fällen hilft einem der Dump dann dabei die stelle im Code zu finden. Das ist vorallem interessant bei Abstürzen die bei Kunden auftreten. Dafür muss man dann aber für jedes release die passenden debug symbols haben sonst hat man ein Problem
BR
Vinzenz
-
Speeedy schrieb:
Wir steigen momentan von VS6 auf VS8 (2005) um und erst im VS8 stellten wir dies fest. Im VS6 zeigten die Zeiger immer auf eine gewisse Addresse (Fragt mich nicht warum...!)
Auf null setzen würd ich ja gerne aber da hätt ich wohl schon fast Monate um alles zu überprüfen und es kämen sicher immer wieder neue...
Gibts nicht eine andere möglichkeit? (z.b. VS oder zusätzliche Software die das überprüft..?)Setz doch mal den Warning-Level auf Maximum. Kanns gerade nicht ausprobieren, aber wenn du Glück hast, gibts einen Warning bei nicht initialisierten Variablen.
Mal ganz davon abgesehen, das jetzt Eure gemachten Programmierfehler der letzten Jahre jetzt ans Tageslicht kommen.
-
Japp - spätestens auf W4 sollte das kommen (sollte in etwa "möglicher zugriff auf uninitialisierte varialbe" heißen)...
MSVC schrieb:
warning C4701: Die möglicherweise nicht initialisierte lokale Variable "blubb" wurde verwendet.
also wirste wirklich mal auf W4 setzen müssen... allerdings habe ich so die befürchtung, dass (wenn ihr uninitialisierte pointer verwendet) noch sehr viel mehr fehler auftreten - also wirste nen bisschen dafür brauchen ^^
naja - hf und gl

-
Unterbricht nicht sogar der Debugger automatisch, wenn auf nicht gesetzte Variablen lesend zugegriffen wird?
-
Badestrand schrieb:
Unterbricht nicht sogar der Debugger automatisch, wenn auf nicht gesetzte Variablen lesend zugegriffen wird?
Doch, mit Run-Time Check Failure #3 (unter MSVC++ 2008 Express).

Verlassen sollte man sich darauf trotzdem nicht...