2011-08-31 6 views
5

私は、間違いなくcloseHandle()をミューテックスハンドルで2回(すでに閉じていたハンドルを閉じる)呼びました。特定の例外エラーはデバッガでのみ発生しますか?

デバッガでコードを実行すると、例外エラーAn invalid HANDLE was specified.が予想通りに届きました。

しかし、スタンドアロン(デバッガの外)でプログラムを「通常」実行すると、例外が表示されないか、または他のエラーが発生します。プログラムが正常に実行されているようです。

これはVisual Studio .NET 2003の設定ですか、それとも後ろにありますか?

+6

これは、closeHandle()の動作を文書化したものです。 http://msdn.microsoft.com/en-us/library/ms724211%28v=vs.85%29.aspxを参照してください: "アプリケーションがデバッガ下で実行されている場合、関数は例外をスローします。有効でないハンドル値または擬似ハンドル値。 – user168715

+0

おそらく、VS .NETでデバッグビルドを実行していますが、ダブルクリックするとリリースビルドを実行していますか? –

+0

私はアサートで同様の動作を見ました。条件付きのコンパイルが可能です。 –

答えて

5

documentation状態:

アプリケーションは、デバッガの下で実行されている場合、それが有効でないハンドル値または擬似ハンドル値のいずれかを受信した場合、この関数は例外をスローします。これは、ハンドルを2回閉じるか、FindClose関数を呼び出す代わりにFindFirstFile関数によって返されたハンドルでCloseHandleを呼び出すと発生します。

+0

「例外を投げる」?私はMSDNのドキュメント作成者がよりよく知っていることを期待しています。 C関数は例外をスローしません。 Win32の例外(構造化例外処理とも呼ばれる)のコンテキストでは、スローされない* raise *が発生します。 –

関連する問題