Invalid assumptions about memory organization

Адрес вычисляется путем добавления или вычитания из адреса переменной

Описание

Этот дефект происходит, когда вы вычисляете адрес переменной в стеке путем добавления или вычитания из адреса другой непеременной типа массив.

Риск

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

Фиксация

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

Примеры

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

void func(void) {
    int var1 = 0x00000011, var2;
    *(&var1 + 1) = 0;
}

В этом примере программист полагается при условии, что &var1 + 1 обеспечивает адрес var2. Поэтому Invalid assumptions about memory organization появляется на + операция. Кроме того, ошибка Pointer access out of bounds также появляется на разыменовывании.

Коррекция — не использует организацию памяти

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

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

Группа: Программирование
Язык: C | C++
Значение по умолчанию: На для рукописного кода, прочь для сгенерированного кода
Синтаксис командной строки: INVALID_MEMORY_ASSUMPTION
Удар: Средняя
ID CWE: 188
Введенный в R2015b