Variable length array with nonpositive size

Размер массива переменной длины равен нулю или отрицательному

Описание

Этот дефект возникает, когда размер массива переменной длины равен нулю или отрицательному.

Риск

Если размер массива переменной длины равен нулю или отрицательному, может произойти неожиданное поведение, такое как переполнение стека.

Зафиксировать

Когда вы объявляете массив переменной длины как локальную переменную в функции:

  • Если вы используете параметр функции в качестве размера массива, проверяйте, что параметр положительный.

  • Если вы используете результат расчета параметра функции в качестве размера массива, проверяйте, что результат положительный.

Можно поместить тест на положительное значение либо перед вызовом функции, либо объявлением массива в теле функции.

Примеры

расширить все

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 привести к отрицательному и нулевому размеру arr.

Коррекция - Сделайте размер массива положительным

Одной из возможных коррекций является исправление или удаление вызовов, которые приводят к непозитивному размеру массива.

Информация о результатах

Группа: Программирование
Язык: C | C++
По умолчанию: On для рукописного кода, off для сгенерированного кода
Синтаксис командной строки: NON_POSITIVE_VLA_SIZE
Влияние: Высокий
ИДЕНТИФИКАТОР CWE: 687
Введенный в R2015b