Отслеживание стоимости Lint на ПК от Gimpel - PullRequest
0 голосов
/ 03 января 2012

Я новичок на этом сайте, поэтому, если я испорчу какой-либо из вопросов и правил здесь, я заранее извиняюсь ... Спасибо!

Это чрезвычайно упрощенный пример кода, но я думаю, что он показывает то, о чем я говорю: у меня есть метод 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 просто не работает, если тест является вызовом метода?

Еще раз спасибо,

ВЧ

1 Ответ

0 голосов
/ 29 февраля 2012

Я думаю, что validNumber определено после foo, но в любом случае PC Lint обычно делает один проход по коду, и в таких случаях он не видит validNumber какпроверка границ для n.

Вы можете попробовать опцию -passes(2) или даже 3 и посмотреть, что из этого делает Lint.Я думаю (но не пытался), что Линт тогда правильно заметил бы, что значение для n находится в правильных пределах.

...