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 で導入