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

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

Описание

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

Риск

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

Фиксация

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

Примеры

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

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