MISRA C++:2008 Rule 7-5-2

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

Описание

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

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

Объяснение

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

Реализация Polyspace

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

Проверка не вызывает нарушений этого правила, если:

  • Функция возвращает адрес локальной переменной. MISRA C++:2008 Rule 7-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 завершает выполнение.

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

Группа: Объявления
Категория: Требуемая
Введенный в R2013b