メインコンテンツ

適切な手法の欠陥

適切なコーディング手法に従うことが可能な欠陥 (ハードコードされたメモリ バッファー サイズや未使用の関数パラメーターの検出など)

これらの欠陥により、コーディング手法の適切さが保たれます。欠陥は、それ自体がクラッシュを発生させなくても、コード内にあるより深刻な論理エラーを示している場合があります。欠陥により、攻撃に対するコードの脆弱性が検出され、保守が難しい場合もあります。欠陥には次のものがあります。

  • ハード コードされた定数 (バッファー サイズやループ境界など)

  • コードの可読性を妨げる問題

  • 潜在的なコーディング エラー

  • const の欠落

Polyspace 結果

すべて展開する

不明瞭な宣言の構文宣言の構文はオブジェクト宣言としてまたは関数宣言の一部として解釈可能
ステートメントのインデントが正しくありませんステートメントのインデントが間違っていることによって、それがブロックの一部として表示される
科学表記形式が無効です無効な形式を使用するとコードの可読性が低くなる (R2022b 以降)
ステートメントが複数存在する行1 行に複数のステートメント
重複しているコードコード セクションが他の場所で重複している (R2023a 以降)
部分的に重複しているコードA section of code is duplicated in other places with very minor changes (R2023a 以降)
バッファー サイズがハードコードされていますメモリ バッファーのサイズがシンボリック定数ではなく数値になっている
ループ境界がハードコードされていますループ境界がシンボリック定数でなく数値になっている
メモリの操作に使用するオブジェクトのサイズがハードコードされていますsizeof の代わりにサイズがハードコードされているメモリ操作
const でないメソッドA method that can be made const is not marked const (R2022a 以降)
パブリックな静的フィールドが const ではないA static and public field of a struct or class is not marked as a const (R2022a 以降)
未変更の変数に const 修飾子が付いていませんconst 修飾されていない変数の値が存続期間中に変更されない
セミコロンで終了するマクロマクロ定義がセミコロンで終了している
マクロに複数のステートメントがありますマクロがセミコロンで終了する複数のステートメントで構成されており、ステートメントは中かっこで囲まれている場合と囲まれていない場合がある
switch case の break がありませんswitch ステートメントの case ブロックが break[[fallthrough]]、または説明コメントで終了していない
データ型は switch 式に不適切な可能性がありますswitch 式に char、short、int、または enum 以外のデータ型が含まれている
if、for、または while ステートメントと同じ行にあるセミコロン同じ行にセミコロンがあると、iffor、または while ステートメントの本体が空になる
void ポインターが削除されていますオブジェクトを指す void* ポインターに対し delete を実行
割り当て関数または割り当て解除関数のオーバーロードが見つかりません割り当て関数と割り当て解除関数のペアのうち 1 つの関数のみをオーバーロード
解放したポインターのリセットがありませんポインター free の後に、残りのデータをクリアするリセット ステートメントが続いていない
const 修飾子付きの型と後続の変更への C++ 参照const 修飾子付きの型の参照を後で変更
const 修飾子または volatile 修飾子付きの C++ の参照型冗長な const 修飾子または volatile 修飾子で宣言されている参照型
汎用の例外に対するキャッチの宣言A catch block handles a generic exception that might have many different subtypes (R2022a 以降)
汎用の例外に対するスローの宣言A function throws a generic exception, which might have many subtypes (R2022a 以降)
無名一時オブジェクトへの参照Local reference is declared by using unnamed temporary variable that a function returns by value (R2023a 以降)
フレキシブル配列メンバー サイズの構文が正しくありませんサイズ 0 または 1 で定義されたフレキシブル配列メンバー
禁止された関数の使用禁止された関数のブロックリストに追加されている関数の使用
禁止されたキーワードの使用Use of keyword that appears in a blocklist of forbidden keywords (R2022a 以降)
禁止されたマクロの使用Use of macro that appears in a blocklist of forbidden macros (R2022b 以降)
setjmp/longjmp の使用setjmplongjmp により通常の制御フローからの逸脱が発生
同じデータに対してビット演算と算術演算が行われていますビット演算と算術演算が混在したステートメント
ファイルがコンパイルされませんファイルにコンパイル エラーがあります (R2021a 以降)
未使用のパラメーターです関数プロトタイプに、関数本体で読み取りも書き込みもされないパラメーターがある
使用されない変数Variable defined or declared but not read (R2024a 以降)
sizeof のオペランドに含まれる式が無意味ですsizeof オペランドに評価されない式が含まれている
無意味なインクルード存在するが使用されない include 命令 (R2022b 以降)
無意味なキャプチャLambda captures objects but does not use the objects (R2024b 以降)

トピック

  • Bug Finder 欠陥グループ

    Bug Finder の欠陥チェッカーは、データ フロー、同時実行、数値などのグループに分類されています。