-detect-pointer-escape)Найдите случаи, когда функция возвращает указатель на одну из своих локальных переменных
Эта опция влияет только на анализ Code Prover.
Укажите, что верификация должна обнаруживать случаи, когда вы получаете доступ к переменной вне ее возможностей через висячие указатели. Такой доступ может произойти, например, когда функция возвращает указатель на локальную переменную, и вы высмеиваете указатель вне функции. dereference вызывает неопределенное поведение, потому что локальная переменная, на которую указывает указатель мыши, не живет вне функции.
Пользовательский интерфейс (только для настольных продуктов): В строении проекта опция находится на узле Check Behavior.
Командная строка и файл опций: Используйте опцию -detect-pointer-escape. См. «Информация о командной строке».
Используйте эту опцию, чтобы включить обнаружение выхода указателя.
Проверка Illegally dereferenced pointer выполняет дополнительную задачу, помимо привычных спецификаций. Когда вы высмеиваете указатель, проверка также определяет, обращаетесь ли вы к переменной вне ее возможностей через указатель. Проверка:
Красный, если все переменные, на которые указывает указатель мыши, доступны вне их возможностей.
Например, вы высмеиваете указатель мыши ptr в func функций это вызывается дважды в коде. В обоих вызовах, когда вы выполняете dereference *ptr, ptr указывает на переменные вне их возможностей. Поэтому проверка Illegally dereferenced pointer красная.
Оранжевый, если доступ к некоторым переменным, на которые указывает указатель мыши, находится вне их возможностей.
Зеленый, если ни одна из переменных, на которые указывает указатель, не доступна за пределами их возможностей, и другие требования проверки также удовлетворены.
В следующем коде, если вы включите эту опцию, Polyspace® Code Prover™ создает красную Illegally dereferenced pointer проверку *ptr. В противном случае Illegally dereferenced pointer проверьте *ptr зеленый.
void func2(int *ptr) {
*ptr = 0;
}
int* func1(void) {
int ret = 0;
return &ret ;
}
void main(void) {
int* ptr = func1() ;
func2(ptr) ;
}
ret доступ к нему за пределами его возможностей.

Когда вы высмеиваете указатель, проверка Illegally dereferenced pointer не проверяет, имеете ли вы доступ к переменной вне ее возможностей. Проверка зеленая, даже если разыменование указателя находится вне переменных возможностей, пока оно удовлетворяет этим требованиям:
Указатель не имеет значение NULL.
Указатель указывает в буфере памяти.
Обнаружение отклонения указателя на стек вне возможностей не применяется к определенным типам указателей. Конкретные ограничения см. в разделе Ограничения верификации Polyspace.
Параметр: -detect-pointer-escape |
| По умолчанию: Off |
Пример (Code Prover): Polyspace Code Prover -sources |
Пример (Код Prover Server): Полипространство -code-prover-server -sources |