2012-01-03 3 views
0

私はこのサイトの初心者です。質問がある場合は、あらかじめお詫び申し上げます。ありがとうございます!GimpelさんのPCリントバリュートラッキング

これは非常に単純化されたコード例ですが、私はそれは私が話しているかを示して思う:私は、値をテストするための別の方法に呼び出しを行うC++メソッドを持っている...

char m_array[MAX]; // class member, MAX is a #define

私がいる刺激がPCリントの値トラッキング validNumber()呼び出しを無視しているようだということで、アウトオブの 警告661の可能なアクセスを提供しますvalidNumber(unsigned int val) { return ((val > 0) && (val <= MAX)); }

foo(unsigned int n) 
{ 
    if (validNumber(n)) //test n 
    { 
     // do stuff 
     m_array[n-1] = 0; 
    } 
} 

オペレータによる境界ポインタ(データの末尾を超え1)「[」私はこのようにそれを行う場合

はしかし、リントは幸せです:

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

テスト場合は、リントの値の追跡だけでは動作しません。メソッド呼び出しですか?再び

おかげで、

HF

答えて

0

私はvalidNumberfooに定義されていることを推測すると思いますが、どのような場合には、PCリントは、通常のコードの上に1つのパスを行い、このような場合には、それはdoesnのnの境界のチェックとしてvalidNumberが表示されません。

オプション-passes(2)、さらには3を試して、Lintがどのようなものを作り出すかを見てください。私は、Lintが正しくの値が正しい境界内にあることに注意すると思う(しかし試していない)と思う。

+0

ありがとうございました!私たちがこの問題を再訪することになった場合、私はthe -passesのトリックを試してみるでしょう。今のところ私たちは#有効なチェックを定義してしまいましたが、もちろんそれはすべてをラインに入れており、Lintはそれを好きです –

関連する問題