3

Purifyを使用したクラス/構造パディングの非常に厄介な副作用が発生します。例えば

struct something {
    int field1;
    char field2;
};

/* ... */

struct something smth, smth2;
smth.field1 = 1;
smth.field2 = 'A';

smth2 = smth;

最後の行は、初期化されたメモリの 3 バイトがアクセスされたことを示す UMR 警告をトリガーする可能性が高いです。これは明らかに誤検知です。構造体の最後の 3 バイトにユーザー データがなく、単なるパディングです。

多くの場合、警告によってログ ファイルがすぐにいっぱいになり、他の実際の問題を確認するのが非常に難しくなります。

誤検知を抑制する方法を知っている人はいますか?

4

1 に答える 1

0

私は浄化の経験がありませんが、おそらく最初の構造体を明示的に初期化すると、この警告が削除されます。

struct something smth = {0};
struct something smth2;

あなたの構造体には(ファイルではなく)ブロックスコープがあると思います。それらにファイル スコープがある場合、ゼロの初期化は暗黙的です。

于 2010-07-21T11:49:31.840 に答える