このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
配列の初期化が不適切です
初期化子を使用した場合の配列の初期化が正しくない
説明
この欠陥は、初期化子を使用した配列の初期化が Polyspace® Bug Finder™ によって正しくないとみなされた場合に発生します。
この欠陥は、通常の初期化子と指示付きの初期化子に適用されます。C99 で指示付きの初期化子を用いると、配列初期化子の要素を任意の順序で配置でき、また、一部の配列要素を暗黙的に初期化できます。指示付きの初期化子は、配列インデックスを使用して、配列要素と配列初期化子要素間の対応関係を確立します。たとえば、ステートメント int arr[6] = { [4] = 29, [2] = 15 }
は int arr[6] = { 0, 0, 15, 0, 29, 0 }
と等価です。
以下のいずれかの形で、初期化子が正しく使用されていない可能性があります。
問題 | リスク | 考えられる解決方法 |
---|---|---|
1 次元配列に対する初期化子で、要素数が配列のサイズより多い。 | 未使用の配列初期化子要素は、コーディング エラーの可能性を示している。 | 配列サイズを大きくするか、余分な要素を削除する。 |
初期化子の値を囲む中かっこの位置が正しくない。 | 中かっこの配置が正しくないため、使用されない配列初期化子要素がある。 未使用の配列初期化子要素は、コーディング エラーの可能性を示している。 | 中かっこを正しく配置する。 |
指示付きの初期化子で、配列の最初の要素が明示的に初期化されていない。 | 配列の最初の要素の暗黙的な初期化は、コーディング エラーの可能性を示している。配列のインデックスが 0 から始まるという事実を見落としている可能性がある。 | すべての要素を明示的に初期化する。 |
指示付きの初期化子で、1 つの要素を 2 回初期化している。 | 最初の初期化がオーバーライドされる。 冗長な最初の初期化は、コーディング エラーの可能性を示している。 | 冗長な初期化を削除する。 |
指示付きの初期化子と指示なしの初期化子を、同じ初期化で使用している。 | 本人または他の検証者は、検査によって配列のサイズを判定できない。 | 指示付きの初期化子か指示なしの初期化子のいずれかを使用する。 |
修正方法
修正方法は欠陥の根本原因によって異なります。上の表に記載されている修正と以下の修正付きのコード例を参照してください。
問題を修正しない場合は、改めてレビューされないように結果またはコードにコメントを追加します。詳細は、以下を参照してください。
Polyspace ユーザー インターフェイスでのバグ修正または正当化による結果への対処 (Polyspace ユーザー インターフェイスで結果をレビューする場合)
Polyspace Access でのバグ修正または正当化による結果への対処 (Polyspace Access) (Web ブラウザーで結果をレビューする場合)。
コードへの注釈付けと既知の結果または許容可能な結果の非表示 (IDE で結果をレビューする場合)
例
結果情報
グループ: プログラミング |
言語: C | C++ |
既定値: 手書きコードはオン、生成コードはオフ |
コマンド ライン構文: IMPROPER_ARRAY_INIT |
影響度: Medium |
バージョン履歴
R2015b で導入