このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
無限ループ
ループが終了しないかまたはループにエラーがある
説明
このループに対するチェックはループに次のいずれかの問題があるかどうかを判別します。
ループが明確に終了しない。
このチェックは Polyspace® がループの出口パスを検出できない場合のみ表示されます。たとえば、ループが関数内にあり、一部の関数入力でループ終了条件が満たされる場合には、その他の入力では条件を満たしていなくてもチェックは表示されません。
ループの反復の 1 つに明確なエラーが 1 つある。
明確なエラーが 1 回のループ反復で発生していても、ループ本体の検証結果はすべてのループ反復に集約されているため、エラーはループ本体にオレンジ チェックとして表示されます。明確な失敗が発生していることを示すために [無限呼び出し] のレッド チェックがループ コマンドに表示されます。
他のチェックと異なり、このチェックは明確なエラーが発生する場合のみ表示されます。検証結果では、チェックは常にレッドとなります。エラーが特定の状況 (ループ境界が可変で、一部の値に対してのみ問題が発生するなど) でのみ発生する場合、このチェックは表示されません。代わりに、ループ コマンドが赤い破線で詳細情報とともにツールヒントに表示されます。
以下の条件が両方 true の場合にも、チェックは表示されません。
for(;;)
やwhile(1)
など、ループにトリビアルな述部が含まれている。ループ本体が空、またはループ本体に
break
、goto
、return
、例外などの終了ステートメントが含まれていない。
代わりに、ループ ステートメントに赤い破線の下線が付けられます。このループ ステートメントにカーソルを置くと、検証ではループが意図的と見なされていることがわかります。たとえば、周期タスクをエミュレートするために意図的に無限ループを導入している場合、レッド チェックを正当化する必要はありません。
このチェックを使用して、ランタイム エラーの原因となるループ内の操作を特定できます。
エラーのソースを見つけるには、[ソース] ペインで関数呼び出しにカーソルを置きツールヒントを見ます。
反復数の少ないループの場合、ループ本体のエラーのソースに移動できます。ループを選択して結果の完全な履歴を表示します。あるいは、ループ キーワードを右クリックして、オプションがあれば [原因に移動] を選択します。
このチェックの診断
例
チェック情報
グループ: 制御フロー |
言語: C | C++ |
頭字語: NTL |