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++
Значение по умолчанию: На для рукописного кода, прочь для сгенерированного кода
Синтаксис командной строки: NON_POSITIVE_VLA_SIZE
Удар: высоко
ID CWE: 687
Введенный в R2015b