Массив переменной длины с неположительным размером

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

Описание

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

Риск

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

Фиксация

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

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

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

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

Примеры

развернуть все

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