AUTOSAR C++14 Rule M7-5-2

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

Описание

Управляйте определением

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

Объяснение

Если объект продолжает указывать на другой объект после того, как последний объект прекращает существование, разыменовывание первого объекта приводит к неопределенному поведению.

Реализация Polyspace

Средство проверки отмечает ситуации, где адрес локальной переменной присвоен указателю, заданному в глобальной области видимости.

Средство проверки не повышает нарушения этого правила если:

  • Функция возвращает адрес локальной переменной. AUTOSAR C++14 Rule M7-5-1 покрытия эта ситуация.

  • Адрес переменной, заданной в области действия блока, присвоен указателю, который задан с большим осциллографом, но не глобальной областью видимости.

    Например:

     void foobar ( void )
      {
        char * ptr;
        {
          char var;
          ptr = &var;
        }
      }
    Только если указатель задан в глобальной области видимости, повышенное нарушение правила. Например, средство проверки правила отмечает присвоение здесь:
    char * ptr;
    void foobar ( void )
      {
          char var;
          ptr = &var;
      }

Поиск и устранение проблем

Если вы ожидаете нарушение правила, но не видите его, обратитесь к Кодированию Стандартных Нарушений, Не Отображенных.

Примеры

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

char * ptr;
 
void foo (void) {
    char varInFoo;
    ptr = &varInFoo; //Noncompliant
}

void bar (void) {
    char varInBar = *ptr;
}

void main() {
    foo();
    bar();
}

Присвоение ptr = &varInFoo несовместимо потому что глобальный указатель ptr может быть разыменован вне функционального foo, где переменная varInFoo больше не находится в осциллографе. Например, в этом примере, ptr разыменовывается в функциональном bar, который называется после foo завершает выполнение.

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

Группа: объявление
Категория: необходимый, неавтоматизированный
Введенный в R2020b