2016-10-04 5 views
0
#include <windows.h> 

int csOpsPrintDataInitialized = 0; 

void ObtainOpsPrintDataCritSect() 
{ 
    CreateCriticalSectionAsNeccessary(); 

    EnterCriticalSection(&csOpsPrintData); 
} // Hp fortify in visual studio 2013 reporting issue: Exception handling. 

でもtry catchを使用しても同じ問題が報告されています。Visual Studioでtry catchを使用する方法C++?

void ObtainOpsPrintDataCritSect_sol()] 
{ 
    try 
    { 
     EnterCriticalSection(&csOpsPrintData); 
    } 
    catch(char *msg) 
    { 
    } 
} 

Hpが勧告を強化:この問題は、2つの方法で回避できます。

  • ラップは、try/catchブロックでEnterCriticalSection()を呼び出します。

  • InitializeCriticalSection()の代わりにInitializeCriticalSectionAndSpinCount()関数を呼び出します。これにより、EnterCriticalSection()が強制的にイベントを割り当てるのではなく、EnterCriticalSection()が使用するイベントが事前に割り当てられます。

+0

「try/catch」と表示されますか?私は '__try/__ catch 'を期待しています。 2つは意図的に似ていますが、 'try'はC++、' __try'はWindows、 'EnterCriticalSection'はWindowsです。 – MSalters

答えて

0

私はそれがEnterCriticalSectionmsdnの状態のドキュメントので、あなたがFortifyでは勧告を無視すべきで偽陽性であると思う:

が可能デッドロック例外を処理しないでください。代わりに、 アプリケーションをデバッグします。

関連する問題