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 の Value Tracking がvalidNumber()呼び出しを無視しているように見え、演算子 '[' による境界外ポインター (データの終わりを超えた 1) への 661 アクセスの可能性があるという警告を出すことです。

ただし、次のようにすると、Lint は満足します。

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

では、テストがメソッド呼び出しの場合、Lint の Value Tracking は機能しないのでしょうか?

再度、感謝します、

HF

4

1 に答える 1

0

これはの後validNumberに定義されていると思いますが、いずれの場合でも、PC Lintは通常、コードを1回パスします。そのような場合、validNumberはの境界のチェックとは見なされません。 foon

このオプションを試してみ-passes(2)たり3、Lintがそれから何を作るのかを確認することもできます。nLintは、の値が正しい範囲内にあることに正しく気付くと思います(ただし、試しませんでした) 。

于 2012-02-29T10:38:10.510 に答える