以下は、C++ で例外処理を学習する過程で作成したコード スニペットです (Visual Studio 2010 コンパイラを使用)。
#include "stdafx.h"
#include <iostream>
using namespace std;
void multi_double() {
double first,second,product;
try{
cout << "Enter the first number\n";
cin >> first;
cout << "Enter the second number\n";
cin >> second;
product = first * second;
cout << product;
}
catch(...){cout << "Got an exceptional behaviour";}
}
void stud_age(){
int age;
try{
cout << "Enter student's age\n";
cin >> age;
if(age < 0)
throw;
cout << endl <<age;
}
catch(...) {
cout << "Caught here\n";
}
}
class Model{
public:
Model(){cout << "ctor\n";}
~Model(){cout << "dtor\n";}
};
int _tmain(int argc, _TCHAR* argv[]) {
//multi_double();
//stud_age();
int a;
try{
Model obj;
int *p = NULL;
*p = 0;//expecting access violation exception
}
catch(...){
cout << "caught an exception\n";
}
return 0;
}
[C++ 例外を有効にする] が [/EHsc] に設定されています。しかし、アプリケーションを実行すると、とにかくクラッシュします! 次の情報とともに:
問題の署名: 問題イベント名: APPCRASH アプリケーション名: DataTypeConversions.exe アプリケーション バージョン: 0.0.0.0 アプリケーション タイムスタンプ: 4ffd8c3d 障害モジュール名: DataTypeConversions.exe 障害モジュール バージョン: 0.0.0.0 障害モジュール タイムスタンプ: 4ffd8c3d 例外コード: c0000005 例外オフセット: 00001051
コントロールがキャッチブロックに来ないのはなぜ?!