1

最近、さまざまなエラーを見つけるために PC-lint9 を使用していますが、本当に驚きましたが、PC-lint9 はダングリング ポインターをトレースできないようです。ここに、私が調べたコードのスナップショットを示します。

int* pkInt = new int;
int* pkDangInt = pkInt;
delete pkInt;
( *pkDangInt ) = 1;

PC-Lint によって検出されたエラーはありません。広告に「ぶら下がっているポインターと初期化されていないポインターの検出」と記載されているため、構成に問題がある可能性があります (エラーを抑制せず、警告レベルを 3 に設定しませんでした)。誰もこれを解決する方法を知っていますか?

4

1 に答える 1

0

おそらく、広告は「ぶら下がりの検出...」と読むべきです。偽陽性と偽陰性の間の古いジレンマ...

さて、PC-lint はダングリング ポインターをまったく検出しようとしていると思われると思いますが、あなたの例を 1 つ検出する必要があります。これは実際にはかなり単純です。しかし、おそらく以下のより構造的なものの方が簡単で、実際に検出された唯一の種類です。試してみませんか?

int* pkDangInt;
{
  int x;
  pkDangInt = &x;
}
( *pkDangInt ) = 1;
于 2010-09-09T20:04:01.903 に答える