Gimpel的PC Lint价值追踪

时间:2012-01-03 16:33:41

标签: lint pc-lint

我是这个网站的新手,所以如果我在这里弄乱任何问题礼仪,我会提前道歉......谢谢!

这是极其简化的示例代码,但我认为它显示了我所说的内容:我有一个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超出数据末尾) operator'['

但如果我这样做,Lint很高兴:

if ((n > 0) && (n <= MAX)) //test n
...

那么,如果测试是方法调用,那么Lint的价值追踪是否不起作用?

再次感谢,

HF

1 个答案:

答案 0 :(得分:0)

我猜在{/ em> validNumber之后foo被定义为,但无论如何,PC Lint通常会对代码进行一次传递,在这种情况下它不会请参阅validNumber以检查n的边界。

您可以尝试选项-passes(2)甚至3,看看Lint从中做出了什么。我认为(但没有尝试)Lint会正确地注意到n的值在正确的范围内。