• ベストアンサー

例外処理がエラーを…(泣)

C++のプログラムを勉強しているのですが 例外処理の部分でエラーをはいてしまいます。 #include<iostream> using namespace std; void Xhandler(int test){ try{ if(test)throw test; else throw "Value is zero"; } catch(int i){ cout << "Caught One! Ex. #: " << i << "\n"; } catch(char *str){ cout << "Caught a string: " ≪ str << "\n"; } } int main(){ cout << "start\n"; Xhandler(1); Xhandler(2); Xhandler(0); Xhandler(3); cout << "end"; return 0; } 実行結果 start Caught One! Ex. #: 1 Caught One! Ex. #: 2 7[sig] 1705 3752 _cygtls::handle_exceptions: Error while dumping state(probably corrupted stack) Segmentation fault (core dumped) catch の char *str を str にして "Value is zero" を 'a' にしたら 予測通りの動作をしたのですが… catch に *str を使って文字列を投げてはいけないのでしょうか? よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • jgk
  • ベストアンサー率75% (104/138)
回答No.2

文字列定数なので、char*じゃなくて、const char*じゃないでしょうか? cygwinのgccではconst char*に変更で通りました。

rukusu
質問者

お礼

ありがとうございました。 ご指摘通り const をつけたら通りました。

その他の回答 (1)

  • yone_sk
  • ベストアンサー率34% (58/167)
回答No.1

私の環境だと正しく動きました。 (Borland C++ 5.5.1 for Win32) コンパイルが通らなかったので一部修正しましたが catch(char *str){ cout << "Caught a string: " ≪ str << "\n"; } ↓ catch(char *str){ cout << "Caught a string: " << str << "\n"; } 「≪」が記号になってたのは関係ないですか?

rukusu
質問者

お礼

<<は質問ページにコピペではなく手打ちしたので その時のミスです。すみません。 プログラム上では<<になっています コンパイラにもよるのかもしれません。 私はCygwinのC++でコンパイルしています 別の方の回答で解決したのでとりあえず締め切らせて いただきます。ありがとうございました。

関連するQ&A

専門家に質問してみよう