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