メインコンテンツ

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

正でないサイズの可変長配列

可変長配列のサイズがゼロか負である

説明

この欠陥は、可変長配列のサイズがゼロか負である場合に発生します。

リスク

可変長配列のサイズがゼロか負である場合、スタック オーバーフローなど、予期しない動作が発生することがあります。

修正方法

可変長配列を関数のローカル変数として宣言する際に、次のようにします。

  • 関数パラメーターを配列サイズとして使用する場合は、そのパラメーターが正であることをチェックする。

  • 関数パラメーターでの計算結果を配列サイズとして使用する場合は、その結果が正であることをチェックする。

正の値かどうかのテストは、関数呼び出しの前か、関数本体の配列の宣言の前に配置できます。

すべて展開する

int input(void);

void add_scalar(int n, int m) {
    int r=0;
    int arr[m][n];
    for (int i=0; i<m; i++) {
        for (int j=0; j<n; j++) {
            arr[i][j] = input();
            r += arr[i][j];
        }
    }
}

void main() {
    add_scalar(2,2);
    add_scalar(-1,2);
    add_scalar(2,0);
}

この例では、add_scalar の 2 番目と 3 番目の呼び出しにより、arr のサイズが負やゼロになっています。

修正 — 配列サイズを正にする

1 つの修正方法として、結果が非正の配列サイズとなる呼び出しを修正または削除します。

結果情報

グループ: プログラミング
言語: C | C++
既定値: 手書きコードはオン、生成コードはオフ
コマンド ライン構文: NON_POSITIVE_VLA_SIZE
影響度: High

バージョン履歴

R2015b で導入