Invalid assumptions about memory organization

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

Описание

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

Риск

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

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

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

Примеры

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

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

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

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

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

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

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