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

int csOpsPrintDataInitialized = 0; 

void ObtainOpsPrintDataCritSect() 
{ 
    CreateCriticalSectionAsNeccessary(); 

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

aber bei der Verwendung von versuchen fangen es immer noch dasselbe Problem melden.Wie verwenden Sie versuchen, in Visual Studio C++ zu fangen?

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

Hp Empfehlung stärken: Dieses Problem kann auf zwei Arten vermieden werden:

  • Wrap ruft Entercriticalsection() in einem try/catch-Block.

  • Rufen Sie die Funktion InitializeCriticalSectionAndSpinCount() anstelle von InitializeCriticalSection() auf. Dies weist das Ereignis vor, das EnterCriticalSection() verwendet, anstatt EnterCriticalSection() zu erzwingen, um das Ereignis zuzuweisen.

+0

Sind Sie sicher, es heißt 'versuchen/fangen'? Ich würde "__try/__ catch" erwarten. Die beiden sind ähnlich in der Absicht, aber "versuchen" ist C++, "__try" ist Windows und "EnterCriticalSection" ist auch Windows. – MSalters

Antwort

0

Ich glaube, es um einen Fehlalarm handelt, sollten Sie die Empfehlung in Fortify ignorieren, weil die Dokumentation über EnterCriticalSection auf msdn Staaten:

nicht eine mögliche Deadlock Ausnahme behandeln Sie; Debuggen Sie stattdessen die Anwendung.

Verwandte Themen