Я изучаю аннотации SAL, я тестировал этот пример в Visual Studio 2017.
Я думал, что компилятор сообщит о предупреждении или ошибке, когда я передам нулевой указатель на InCallee
тем не менее, он все еще может работать правильно. Поэтому мой вопрос заключается в том, является ли SAL подобным комментариям к коду и не будет проверять законность данных, или он может проверять данные только потому, что я сделал что-то не так?
void InCallee(_In_ int *pInt) //_In_ is allowed to be NULL
{
int i = *pInt;
}
void GoodInCaller()
{
int *pInt = new int;
*pInt = 5;
InCallee(pInt);
delete pInt;
}
void BadInCaller()
{
int *pInt = NULL;
InCallee(pInt); // pInt should not be NULL
}
Задача ещё не решена.
Других решений пока нет …