exponenta event banner

Недопустимые предположения об организации памяти

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

Описание

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

Риск

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

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

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

Примеры

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

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

В этом примере программист полагается на предположение, что &var1 + 1 предоставляет адрес var2. Поэтому на вкладке Недопустимые предположения об организации памяти + операция. Кроме того, на развороте также появляется ошибка доступа за пределами границ указателя.

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

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

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

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