【问题标题】:Gimpel's PC Lint Value TrackingGimpel 的 PC 皮棉值跟踪
【发布时间】:2012-01-03 16:33:41
【问题描述】:

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

这是非常简化的示例代码,但我认为它说明了我在说什么:我有一个 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 的值跟踪是否不起作用?

再次感谢,

高频

【问题讨论】:

    标签: lint pc-lint


    【解决方案1】:

    我猜validNumber 是在foo 之后定义的,但无论如何,PC Lint 通常会遍历代码,在这种情况下它看不到 validNumber检查n 的边界。

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

    【讨论】:

    • 感谢您的建议!如果我们最终重新访问这个问题,我会尝试 -passes 技巧。现在,虽然我们刚刚结束了#defining 有效检查,这当然只是把所有内容都放在一起,而且 Lint 喜欢它
    猜你喜欢
    • 2011-11-23
    • 1970-01-01
    • 1970-01-01
    • 2010-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-03
    相关资源
    最近更新 更多