次のプログラムを検討してください
struct X
{
int d;
X(){} // forget to initialize d
};
int main()
{
X x;
volatile int y=x.d; // read uninitialized d
(void)y; // (kill useless warning)
}
明らかに、未定義の動作があり、一般的にデバッグ ツールを使用してキャッチできるようにしたいと考えています。cppcheck (オンラインデモを使用) と 、およびg++ -fsanitize=address
をg++ -fsanitize=undefined
試しましvalgrind
た。x.d
しかし、これらのツールは、読み取り時に初期化されていないことを報告しません。
この種の未定義の動作 (できれば Linux で実行) をキャッチするには、どのツールを使用できますか?