Указатель на локальную переменную выходит из области действия переменной
Этот дефект возникает, когда указатель или ссылка на локальную переменную выходит из области действия переменной. Например:
Функция возвращает указатель на локальную переменную.
Назначение выполняется функцией globPtr = &locVar. globPtr является глобальной переменной указателя и locVar является локальной переменной.
Назначение выполняется функцией *paramPtr = &locVar. paramPtr является параметром функции, который является, например, int** указатель и locVar является локальным int переменная.
Метод C++ выполняет назначение memPtr = &locVar. memPtr является элементом данных указателя класса, которому принадлежит метод. locVar является переменной, локальной для метода.
(C++ 11 и более поздние версии) Функция возвращает объект лямбда-выражения, который захватывает локальные переменные функции по ссылке.
Дефект также относится к памяти, выделенной с помощью alloca функция. Дефект не относится к статическим локальным переменным.
Локальным переменным назначается адрес в стеке. После окончания области действия локальной переменной этот адрес становится доступным для повторного использования. Использование этого адреса для доступа к значению локальной переменной вне области действия переменной может привести к непредвиденному поведению.
Если указатель на локальную переменную выходит из области действия переменной, Polyspace ® Bug Finder™ выделяет дефект. Дефект появляется, даже если адрес, сохраненный в указателе, не используется. Для поддерживаемого кода рекомендуется не разрешать указателю выходить из области действия переменной. Даже если вы сейчас не используете адрес в указателе, кто-то другой, использующий вашу функцию, может использовать адрес, вызывая неопределенное поведение.
Не допускайте выхода указателя или ссылки на локальную переменную из области действия переменной.
| Группа: Статическая память |
| Язык: C | C++ |
| По умолчанию: Вкл для рукописного кода, выкл для сгенерированного кода |
Синтаксис командной строки: LOCAL_ADDR_ESCAPE |
| Воздействие: Высокое |
| CWE ID: 562, 825 |