exponenta event banner

CERT C: ARR37-C правил

Не добавлять и не вычитать целое число в указатель на объект, не являющийся массивом

Описание

Определение правила

Не добавляйте и не вычитайте целое число из указателя на объект, не являющийся массивом. [1 ]

Внедрение Polyspace

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

Примеры

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

Проблема

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

Риск

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

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

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

Пример - Зависимость от организации памяти
void func(void) {
    int var1 = 0x00000011, var2;
    *(&var1 + 1) = 0;
}

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

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

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

Проверить информацию

Группа: Правило 06. Массивы (ARR)
Представлен в R2019a

[1] Данное программное обеспечение было создано компанией MathWorks и включает в себя следующие компоненты: «Веб-сайт SEI CERT-C», © 2017 Университет Карнеги-Меллон, веб-сайт SEI CERT-C + + © 2017 Университет Карнеги-Меллон, "Стандарт кодирования SEI CERT C - Правила разработки безопасных, Надежные и безопасные системы - 2016 Edition ", © 2016 Университет Карнеги-Меллон, и "Стандарт кодирования SEI CERT C++ - Правила разработки безопасных, Надежные и безопасные системы в C++ - 2016 Edition "© 2016 Университет Карнеги-Меллон, со специальным разрешением от его Института программного обеспечения.

ЛЮБОЙ МАТЕРИАЛ УНИВЕРСИТЕТА КАРНЕГИ МЕЛЛОНА И/ИЛИ ЕГО ПРОГРАММНОГО ИНЖЕНЕРНОГО ИНСТИТУТА, СОДЕРЖАЩИЙСЯ В НАСТОЯЩЕМ ДОКУМЕНТЕ, ПОСТАВЛЯЕТСЯ КАК ЕСТЬ. УНИВЕРСИТЕТ КАРНЕГИ МЕЛЛОН НЕ ДАЕТ НИКАКИХ ГАРАНТИЙ, ВЫРАЖЕННЫХ ИЛИ ПОДРАЗУМЕВАЕМЫХ, В ОТНОШЕНИИ ЛЮБЫХ ВОПРОСОВ, ВКЛЮЧАЯ, НО НЕ ОГРАНИЧИВАЯСЬ, ГАРАНТИИ ПРИГОДНОСТИ ДЛЯ ЦЕЛЕЙ ИЛИ ТОВАРНОЙ ПРИГОДНОСТИ, ИСКЛЮЧИТЕЛЬНОСТИ ИЛИ РЕЗУЛЬТАТОВ, ПОЛУЧЕННЫХ ОТ ИСПОЛЬЗОВАНИЯ УНИВЕРСИТЕТ КАРНЕГИ МЕЛЛОН НЕ ДАЕТ НИКАКИХ ГАРАНТИЙ В ОТНОШЕНИИ СВОБОДЫ ОТ ПАТЕНТА, ТОВАРНОГО ЗНАКА ИЛИ НАРУШЕНИЯ АВТОРСКИХ ПРАВ.

Данное программное обеспечение и связанная с ним документация не были рассмотрены и не одобрены Университетом Карнеги-Меллона или его Институтом разработки программного обеспечения.