Отслеживание Lint Value на ПК от Gimpel
Я новичок на этом сайте, поэтому, если я испорчу какой-либо из вопросов и правил здесь, я заранее извиняюсь... Спасибо!
Это чрезвычайно упрощенный пример кода, но я думаю, что он показывает то, о чем я говорю: у меня есть метод C++, который делает вызов другого метода для проверки значения...
char m_array[MAX]; // class member, MAX is a #define
foo(unsigned int n)
{
if (validNumber(n)) //test n
{
// do stuff
m_array[n-1] = 0;
}
}
где: validNumber(unsigned int val) { return ((val > 0) && (val <= MAX)); }
Раздражение, которое я испытываю, заключается в том, что отслеживание значений PC Lint игнорирует validNumber()
вызывает и выдает предупреждение 661 о возможном доступе за пределы указателя (1 за концом данных) оператором '['
Однако, если я сделаю это так, Линт будет счастлив:
if ((n > 0) && (n <= MAX)) //test n
...
Итак, отслеживание значений Lint просто не работает, если тест является вызовом метода?
Еще раз спасибо,
HF
1 ответ
Я предполагаю, что validNumber
определяется после foo
, но в любом случае PC Lint обычно делает один проход по коду, и в таких случаях он не видит validNumber как проверку границ для n
,
Вы можете попробовать вариант -passes(2)
или даже 3
и посмотрим, что из этого делает Линт. Я думаю (но не пытался), что Линт тогда правильно заметит, что значение для n
находится в правильных пределах.