0

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

这是极其简化的示例代码,但我认为它显示了我在说什么:我有一个 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 超出数据结尾)

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

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

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

再次感谢,

高频

4

1 回答 1

0

我猜这validNumber .foon

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

于 2012-02-29T10:38:10.510 回答