未初期化変数
使用前に初期化されていない変数
説明
この欠陥は、変数の値が読み取られる前にその変数が初期化されていなかった場合に発生します。
リスク
変数が明示的に初期化されていない場合、変数値は予測できません。変数が特定の値をもつことは期待できません。
修正方法
修正方法は欠陥の根本原因によって異なります。たとえば、値を変数に割り当てたがその割り当てに到達不能であるか、条件付きステートメントの 2 つの分岐のいずれかで値を変数に割り当てた可能性があります。到達不能コードまたは割り当ての欠落を修正します。
多くの場合、結果の詳細 (または Polyspace as You Code のソース コード ツールヒント) には欠陥につながる一連のイベントが表示されます。そのシーケンス内のどのイベントについても修正を実装できます。結果の詳細にイベント履歴が表示されない場合は、ソース コード内で右クリック オプションを使用して、欠陥に関連する変数のこれまでの参照を検索し、関連するイベントを検出できます。Polyspace デスクトップ ユーザー インターフェイスでの Bug Finder の結果の解釈またはPolyspace Access Web インターフェイスでの Bug Finder の結果の解釈 (Polyspace Access)も参照してください。
以下の修正例を参照してください。宣言時に変数を初期化することをお勧めします。
問題を修正しない場合は、改めてレビューされないように結果またはコードにコメントを追加します。詳細は、以下を参照してください。
Polyspace ユーザー インターフェイスでのバグ修正または正当化による結果への対処 (Polyspace ユーザー インターフェイスで結果をレビューする場合)。
Polyspace Access でのバグ修正または正当化による結果への対処 (Polyspace Access) (Web ブラウザーで結果をレビューする場合)。
コードへの注釈付けと既知の結果または許容可能な結果の非表示 (IDE で結果をレビューする場合)
チェッカーの拡張
チェッカーは次の方法で拡張できます。
Polyspace® は、関数に未初期化変数を渡すポインターにフラグを設定しません。ポインターによって関数に渡される、初期化されていない変数を検出するには、オプション
-code-behavior-specificationを使用してチェッカーを拡張します。関数引数のポインター渡しをチェックする初期化のためのチェッカーの拡張を参照してください。特定のシステム入力値の場合にのみ、コード内のある変数が初期化されない場合は、欠陥を引き起こす可能性のある入力値の組み合わせの 1 つと見なすことができます。特定のシステム入力値から欠陥を見つけるための Bug Finder チェッカーの拡張を参照してください。
例
結果情報
| グループ: データ フロー |
| 言語: C | C++ |
| 既定値: オン |
コマンド ライン構文: NON_INIT_VAR |
| 影響度: High |
バージョン履歴
R2013b で導入