Как использовать try catch в Visual Studio c ?

#visual-studio #c 11 #visual-c #fortify

#visual-studio #c 11 #visual-c #укрепить

Вопрос:

 #include <windows.h>

int csOpsPrintDataInitialized = 0;

void ObtainOpsPrintDataCritSect()
{
    CreateCriticalSectionAsNeccessary();

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

но при использовании try catch он по-прежнему сообщает о той же проблеме.

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

Рекомендация Hp по укреплению: этой проблемы можно избежать двумя способами:

  • Оберните вызовы EnterCriticalSection() в блок try / catch .

  • Вызовите функцию InitializeCriticalSectionAndSpinCount() вместо InitializeCriticalSection() . Это предварительно выделяет событие, которое использует EnterCriticalSection(), вместо того, чтобы заставлять EnterCriticalSection() выделять событие.

Комментарии:

1. Вы уверены, что это говорит try/catch ? Я бы ожидал __try/__catch . Они похожи по назначению, но try являются C , __try Windows, а EnterCriticalSection также Windows.

Ответ №1:

Я думаю, что это ложное срабатывание, вы должны игнорировать рекомендацию в fortify, потому что в документации EnterCriticalSection на msdn указано :

Не обрабатывайте возможное исключение взаимоблокировки; вместо этого отладьте приложение.