Das abfangen von Division durch null-Fehler in Visual Studio 2008 C++?

Wie kann ich catch a divide-by-zero-Fehler (und nicht andere Fehler; und um Zugang zu Informationen über die Ausnahme) in Visual Studio 2008 C++?

Habe ich versucht, dieses:

try {
  int j=0;
  int i= 1/j;//actually, we call a DLL here, which has divide-by-zero
} catch(std::exception& e){
  printf("%s %s\n", e.what()); 
}  catch(...){
  printf("generic exception");
}

Aber das geht der generic ... catch-block. Ich verstehe, dass die MS-spezifischen __try kann nützlich sein, hier irgendwie, aber ich würde lieber C++ - standard, und in jedem Fall habe ich Destruktoren, die verhindern, dass die Verwendung von __versuchen.

KLARSTELLUNG: Der obige code ist vereinfacht, für die Erläuterung. Eigentlich ist die Division durch null ist ein Fehler, der sich tief in eine Drittanbieter-DLL, für die ich nicht den source-code. Der Fehler hängt vom parameter (ein handle zu einer komplexen Struktur), die ich übergeben, um die Bibliothek, aber nicht in einer offensichtlichen Weise. Also, ich möchte in der Lage sein zu erholen würdevoll.

  • nicht Division durch null?
  • "Ich würde es vorziehen, standard-C++" dann müssen Sie es vorziehen, nicht durch null zu dividieren, denn das ist Undefiniertes Verhalten. Es ist Plattform-spezifisch, dass es eine Ausnahme auslöst, an alle, es ist also keine große Zumutung, wenn die Mittel des fangs, es ist auch Plattform-spezifische. Auf Plattformen, wo eine Division durch null nicht werfen, Sie nicht wiederherstellen dieser Fehler in der dll, so dass Sie nicht brauchen eine Plattform-unabhängige Mittel der Erholung.
  • Jessop die In dem realen Beispiel die Division durch null ist tief in einer DLL, für die ich nicht den source-code.
InformationsquelleAutor Joshua Fox | 2009-12-02
Schreibe einen Kommentar