フレキシブル配列メンバー サイズの構文が正しくありません
サイズ 0 または 1 で定義されたフレキシブル配列メンバー
説明
この欠陥は、標準 C 構文を使用せずに、フレキシブル配列メンバーをもつ構造体を定義した場合に発生します。
C99 以降、サイズを指定せずにフレキシブル配列メンバーを定義できます。たとえば、次の例における desc はフレキシブル配列メンバーです。
struct record {
size_t len;
double desc[];
};struct record {
size_t len;
double desc[0];
};リスク
サイズ 0 または 1 を使用してフレキシブル配列メンバーを定義する場合、実装はコンパイラに依存します。この構文を認識しないコンパイラでは、サイズ 1 の int 配列は 1 つの int 変数のバッファーをもちます。このバッファーを超えて書き込もうとすると、範囲外の配列アクセスに起因する問題が生じる可能性があります。
標準 C 構文を使用してフレキシブル配列メンバーを定義している場合、実装は規格に準拠するすべてのコンパイラ間で移植可能になります。
修正方法
フレキシブル配列メンバーを構造体に実装するには、サイズ指定なしの配列を定義します。構造体にはその配列以外に 1 つのメンバーが含まれている必要があり、配列は構造体の最後のメンバーでなければなりません。
例
結果情報
| グループ: 適切な手法 |
言語: C (オプション -c-version c90 で示される C90 コードに対して解析が実行された場合、チェッカーは無効) |
| 既定値: オフ |
コマンド ライン構文: FLEXIBLE_ARRAY_MEMBER_INCORRECT_SIZE |
| 影響度: Low |
バージョン履歴
R2018b で導入