[英]How to solve polyspace warning "array index out of bounds
在對代碼庫進行多空間分析時,我在下面的代碼片段上收到一個橙色檢查警告,指出指針可能超出了它的范圍。
我嘗試在訪問 if( x[i] != NULL) 之類的數組之前添加一個空檢查,但這沒有幫助。作為參數傳遞給函數的指針也被聲明為指針,所以我無法確定傳遞給函數的緩沖區大小。
void foo(const int *x, unsigned int value)
{
int i, data;
for(i=0;i<value;i++)
{
data = x[i]; // pointer may be out of bounds here
}
sendToSomeOtherInterface(data);
}
我可以理解 polyspace 可能會假設在某個時間點,指針可能指向無效的內存並且代碼可能會崩潰,但是如何更干凈地編寫代碼以避免問題? 我無法更改指針的使用,因為它對大文件有影響。
Polyspace 如何處理這取決於分析的上下文。 如果您只運行該函數並依賴於 Polyspace 的主生成器,那么我希望它是第 6 行的橙色越界數組索引。
有幾點需要考慮:
i
將在常量指針x
指向的緩沖區的范圍內,Polyspace 需要能夠知道由x
表示的緩沖區的大小。x
的邊界或 value 的value
的情況。 這對於任何使用 stackoverflow 的人來說都是如此,只是在沒有上下文的情況下閱讀代碼。x
傳入的內容的大小
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.