C++ の offsetof の誤った使用
offsetof
マクロの不適切な引数による未定義の動作の発生
説明
この欠陥は、動作が定義されていない offsetof
マクロに引数が渡された場合に発生します。
offsetof
マクロ:
offsetof(classType, aMember)
classType
型のオブジェクトの先頭からのデータ メンバー aMember
のオフセットをバイト単位で返します。offsetof
で使用する場合、classType
と aMember
には一定の制限があります。
classType
は標準レイアウト クラスでなければならない。たとえば、メンバー関数
virtual
を含んでいてはなりません。標準レイアウト クラスの要件の詳細は、C++ named requirements: StandardLayoutType を参照してください。aMember
は静的であってはならない。aMember
はメンバー関数であってはならない。
チェッカーは、引数がこれらの 1 つ以上の制限に違反している場合、offsetof
マクロの使用にフラグを設定します。
リスク
offsetof
マクロの引数の制限に違反すると未定義の動作につながります。
修正方法
offsetof
マクロは、標準レイアウト クラスの非静的データ メンバーに対してのみ使用します。
結果の詳細に、offsetof
マクロのどの制限に違反しているかが示されます。その違反を修正します。
例
結果情報
グループ: プログラミング |
言語: C++ |
既定値: 手書きコードはオン、生成コードはオフ |
コマンド ライン構文: OFFSETOF_MISUSE |
影響度: Medium |
バージョン履歴
R2019a で導入