Программное обеспечение идентифицирует подмножество оранжевых проверок, которые являются наиболее вероятными ошибками времени выполнения. Если вы выбираете Critical checks из выпадающего списка в левых панели инструментов панели Results List, можно просмотреть это подмножество.
Эти оранжевые проверки связаны с путем и ограниченными входными значениями. Здесь, входные значения относятся к значениям, которые являются внешними к приложению. Примеры включают:
Входные параметры функций вызваны сгенерированным основным. Для получения дополнительной информации о функциях, вызванных сгенерированным основным, смотрите Functions to call (-main-generator-calls).
Глобальные и энергозависимые переменные.
Данные возвращены заблокированной функцией. Данные могут быть значением, возвращенным функцией или параметром функции, измененным через указатель.
Следующий пример показывает связанную с путем оранжевую проверку, которая может быть идентифицирована как потенциальная ошибка времени выполнения.
Рассмотрите следующий код.
void path(int x) {
int result;
result = 1 / (x - 10);
// Orange division by zero
}
void main() {
path(1);
path(10);
}
... Warning: scalar division by zero may occur ...
Этот Division by zero проверяет result=1/(x-10) является оранжевым потому что:
path(1) не вызывает ошибку деления на нуль.
path(10) вызывает ошибку деления на нуль.
Polyspace® указывает на определенную ошибку деления на нуль через ошибку Non-terminating call на path(10). Если вы выбираете красную проверку на path(10), панель Result Details предоставляет следующую информацию:
NTC .... Reason for the NTC: {path.x=10)Большинство входных значений может быть ограничено техническими требованиями области значений данных (DRS). Следующий пример показывает оранжевую проверку, связанную с ограниченными входными значениями, которые могут быть идентифицированы как потенциальная ошибка времени выполнения.
int tab[10];
extern int val;
// You specify that val is in [5..10]
void assignElement(int index) {
int result;
result = tab[index];
// Orange Out of bounds array index
}
void main(void) {
assignElement(val);
}Если вы указываете диапазон данных PERMANENT 5 - 10 для переменной val, верификация генерирует оранжевый чек Out of bounds array index на tab[index]. Панель Result Details предоставляет информацию о потенциальной ошибке:
Warning: array index may be outside bounds: [0..9] This check may be an issue related to bounded input values Verifying DRS on extern variable val may remove this orange. array size: 10 array index value: [5 .. 10]
Следующий пример показывает оранжевую проверку, связанную с неограниченными входными значениями, которые могут быть идентифицированы как потенциальная ошибка времени выполнения:
int tab[10];
extern int val;
void assignElement(int index) {
int result;
result = tab[index];
// Orange Out of bounds array index
}
void main(void) {
assignElement(val);
}Верификация генерирует оранжевый чек Out of bounds array index на tab[index]. Панель Result Details предоставляет информацию о потенциальной ошибке:
Warning: array index may be outside bounds: [0..9] This check may be an issue related to unbounded input values If appropriate, applying DRS to extern variable val may remove this orange. array size: 10 array index value: [-231 .. 231-1]