2012-01-03 69 views
0

我是这个网站的新手,所以如果我搞砸任何问题 - 在这里问礼仪,我提前道歉...谢谢!Gimpel的PC皮棉价值跟踪

这是非常简单的示例代码,但我认为这显示了我说的:我有一个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的价值跟踪只是没有如果测试工作是一个方法调用?再次

感谢,

HF

回答

0

我猜validNumberfoo之后定义,但在任何情况下,PC林特通常使一个传过来的代码,在这种情况下,它不看不到有效的号码作为n的边界检查。

您可以尝试选项-passes(2)甚至3,并查看Lint从中得出的结果。我认为(但没有尝试)林特会正确地注意到n的值在正确的范围内。

+0

感谢您的建议!如果我们最终要重新访问这个问题,我会尝试使用-passes技巧。现在虽然我们刚刚结束了#定义有效检查,当然这只是把它放在一起,林特喜欢它 – 2012-05-18 17:08:42