クラス/構造のパディングの純粋なUNINITメモリ読み取り(UMR)

StackOverflow https://stackoverflow.com/questions/3298133

  •  18-09-2020
  •  | 
  •  

質問

私は usa au purify を備えたクラス/構造のパディングの副作用を経験します。e.g.

struct something {
    int field1;
    char field2;
};

/* ... */

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

smth2 = smth;
.

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

多くの場合、警告はログファイルを非常にすばやく記入していて、他の実際の問題を見にくくなるように非常に難しくなります。

偽の陽性を抑制する方法は誰でも知っていますか?

役に立ちましたか?

解決

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

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

構造体にブロックスコープがあると仮定します(ファイルではありません)。ファイルスコープがある場合、ゼロ初期化は暗黙的です。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top