#define MAX_MEMSEG 32764
typedef void (*ptrFunc)(int memseg);
ptrFunc operation = (ptrFunc)(0x003c);
void main(void) {
for (int i=1; i <= MAX_MEMSEG; i++)
operation(i);
}
В этом примере указатель на функцию operation
приведено к содержимому места в памяти. Polyspace® не может определить, содержит ли расположение переменную или код функции, и хорошо ли введена функция. Поэтому, когда указатель operation
dereferenced и используется в вызове функции, проверка Correctness condition оранжевая.
После оранжевой проверки Correctness condition из-за абсолютного использования адреса, программа принимает, что следующие переменные имеют полную область значений значений, разрешенных их типом:
Переменная, сохраняющая возвращаемое значение из вызова функции.
В следующем примере программное обеспечение принимает, что возврат значение operation
- полный диапазон.
typedef int (*ptrFunc)(int);
ptrFunc operation = (ptrFunc)(0x003c);
int main(void) {
return operation(0);
}
Переменные, которые могут быть изменены через аргументы функции.
В следующем примере указатель на функцию operation
принимает аргумент указателя ptr
который указывает на переменную var
. После вызова к operation
программное обеспечение принимает, что var
имеет полное значение.
typedef void (*ptrFunc)(int*);
ptrFunc operation = (ptrFunc)(0x003c);
void main(void) {
int var;
int *ptr=&var;
operation(ptr);
}