#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 указано :
Не обрабатывайте возможное исключение взаимоблокировки; вместо этого отладьте приложение.