我是这个网站的新手,所以如果我在这里弄乱任何问题礼仪,我会提前道歉......谢谢!
这是极其简化的示例代码,但我认为它显示了我所说的内容:我有一个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
答案 0 :(得分:0)
我猜在{/ em> validNumber
之后foo
被定义为,但无论如何,PC Lint通常会对代码进行一次传递,在这种情况下它不会请参阅validNumber以检查n
的边界。
您可以尝试选项-passes(2)
甚至3
,看看Lint从中做出了什么。我认为(但没有尝试)Lint会正确地注意到n
的值在正确的范围内。