Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Chriss Senior JLI'ler
Anmeldedatum: 18.08.2004 Beiträge: 267
Medaillen: Keine
|
Verfasst am: 11.09.2006, 18:14 Titel: Problem mit Try Catch |
|
|
Hi ich habe folgenden Codeblock
CPP: | try
{
VB_Object->VertexBuffer->Release();
// VertexBuffer und vertexbufferobjekt löschen
delete VB_Object->VertexBuffer;
delete VB_Object;
}
catch( const std::exception &e )
{
}
|
VB_Object ist eine von mir geschriebene Klasse
VertexBuffer ist ein Direct3D Vertexbuffer
Nun zu meinem Problem:
Von C# bin ich gewohnt, das bei einem Fehler innerhalb des Tryblocks, das Programm einfach in den Catchblock springt und dort einfach weiterläuft.
In meinem C++ Programm bekomme ich einen Absturz mit der Meldung "Unhandled exception".
Also der Vertexbuffer ist nicht gültig, was auch zum absturz führt. Wie kann ich Try Catch so benutzen wie in C#? |
|
Nach oben |
|
|
DirectXer Dark JLI'ler
Anmeldedatum: 05.02.2005 Beiträge: 1201 Wohnort: Köln Medaillen: Keine
|
Verfasst am: 11.09.2006, 18:45 Titel: |
|
|
das problem is, dass keine std::exception ausgeworfen wird. probiers mit CPP: | try
{
}
catch( ... )
{
} |
Aber mal dafür, dass überhaupt ne exception kommt: VB_Object::VertexBuffer ist bestimmt ein IDirect3DVertexBuffer9* oder? den darfstt du net deleten, release() reicht. Und danach noch auf NULL setzen.
Und noch was: am Besten machst du die freigabe aller Objekte von VB_Object im Destruktor und net von außen, dann genügt ein delete VB_Object
Gruß DXer |
|
Nach oben |
|
|
Chriss Senior JLI'ler
Anmeldedatum: 18.08.2004 Beiträge: 267
Medaillen: Keine
|
Verfasst am: 11.09.2006, 20:39 Titel: |
|
|
Danke für die Antwort
Ja es ist ein IDirect3DVertexBuffer9* und ich werde das ändern.
Das mit den 3 Punkten habe ich schon auf manchen tutorials gesehen aber ich hab es für einen Platzhalter gehalten.
Gut zu wissen danke |
|
Nach oben |
|
|
David Super JLI'ler
Alter: 39 Anmeldedatum: 13.10.2005 Beiträge: 315
Medaillen: Keine
|
Verfasst am: 11.09.2006, 22:36 Titel: |
|
|
Die Punkte "..." fangen stehen zwar für alle Arten von Exceptions allerdings bieten sie dir wenig Möglichkeit an detaiierte Informationen zu kommen.
Im allgemeinen ist es sinnvoller sein Exceptionhandling auf mögliche Exceptions zu spezialisieren und in allen anderen Fällen weiterzuleiten sodass die Exception später behandelt werden kann:
CPP: | try
{
// irgendwas das eine Exception wirft
}
catch ( const foobarexception &e )
{
// foobarexceptions behandeln
}
catch ( ... )
{
// evtl Logeintrag wg nicht behandelter Exception
throw;
}
|
grüße |
|
Nach oben |
|
|
GreveN JLI Master
Alter: 38 Anmeldedatum: 08.01.2004 Beiträge: 901 Wohnort: Sachsen - Dresden Medaillen: Keine
|
Verfasst am: 15.09.2006, 14:26 Titel: |
|
|
Wenn du selbst ein Exceptionsystem implementierst, würde ich dir empfehlen die Exceptionklassen der Standardbibliothek als Ausgangsbasis zu nehmen und von diesen abzuleiten, das ermöglicht dir das Implementieren ganzer "Exceptionhierarchien" und du bist voll kompatibel zur STL und Co. |
|
Nach oben |
|
|
|