2017-10-10 4 views
-1

をcatchedすることはできません。C++長エラー例外が

throw "something happen" 

__cxa_throwはこの例外をキャッチすることができます。

しかし、私は書いた場合:

std::string s; s.resize(-1); 

__cxa_throwはそれをキャッチすることはできません。 なぜ、どのように修正するのかを知りたい。

更新:不完全な説明を申し訳ありません。私の目的は、クラッシュスタックを知ることです。

が呼び出されました。 例外をスローしない場合、どうすればよいですか?

申し訳ありませんが、画像を添付していません。もう一つはstd::string::resizeメンバ関数は、あなたのケースで例外を発生しません

throw "something happen" 

enter image description here

enter image description here

+6

「__cxa_throw」は例外を捕まえる*にどのように関与していますか?これをテストするために使用するコードの一部を表示できますか? –

+0

「__cxa_throwはそれをキャッチできません」とはどういう意味ですか?そして、あなたがそれをキャッチするために使用したコードを投稿してください。 – bolov

+0

最初のコード例と2番目のコード例の接続は何ですか? –

答えて

2

std::string s; s.resize(-1); 

ある 最初のページであるための整数リテラル-1は常に符号なしの最大値oに変換されますf std::size_tタイプは、関数が受け入れるものであり、32ビットプラットフォームの場合は4294967295、64ビットプラットフォームの場合は18446744073709551615などとなります。スローできる例外はstd::length_errorです。このSO投稿にはさらに詳しい情報があります:
Using -1 as a flag value for unsigned (size_t) types

+0

答えをいただきありがとうございます。質問を修正し、何をすべきか教えてください。 – user8751745

+0

例外がスローされたかどうかわからないので、なぜ__cxa_throw関数がキャッチできないのか混乱しました。実際、システムは機能と呼ばれていないようです。 – user8751745