5

私はこのコードを持っています、

#include <iostream>

void foo(int *a)
{
    std::cout<<*a<<std::endl;
}

int main()
{
    int i;
    foo(&i);
}

これは、初期化されていない変数が使用されていることを示しています。

エラー C4700に依存するだけでなく/RTCuも試しましたが、上記のコードでは、コンパイラはこれをエラーとしてフラグ付けしていません。

コード分​​析も実行してみましたが、コードフラグメントとして問題がないと報告されました。

では、ソース コード内の初期化されていない変数を特定する信頼できる方法は何でしょうか?

valgrindはここですばらしい仕事をすることを知っていますが、Windows API と MFC への呼び出しが多いので、私にとってはオプションではありません。

4

2 に答える 2

1

静的分析部分について: VS2013 の時点で、別の静的分析ツールにアクセスできる場合は、デフォルトのアナライザーに頼りすぎてキャッチすることはありません (ただし、VS を使用して他の人が見逃している可能性があるものをキャッチすることは良いことです)。ここではそうではない可能性がありますが、静的アナライザーは、多くの場所で見られるパターンや、他の開発者によって許容される規範としてオーバーライドされたパターンを無視する可能性があることに注意してください。ただし、Coverity がこのケースを報告しなかったとしたら、私は驚くでしょう (申し訳ありませんが、テスト用に ATM をインストールしていません)。無視した場合、共有メモリ アドレスの可能性があると見なされた可能性があります。

于 2014-12-20T15:00:24.700 に答える