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