簡體   English   中英

如何解決多空間警告“數組索引超出范圍

[英]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 行的橙色越界數組索引。

有幾點需要考慮:

  1. 此代碼至少違反了一些關於指針和數組使用的常見行業編碼准則。
  2. 為了讓 Polyspace 知道索引i將在常量指針x指向的緩沖區的范圍內,Polyspace 需要能夠知道由x表示的緩沖區的大小。
  3. 如果沒有任何調用上下文(使用主生成器並且沒有顯式調用此函數),Polyspace 將陷入不知道x的邊界或 value 的value的情況。 這對於任何使用 stackoverflow 的人來說都是如此,只是在沒有上下文的情況下閱讀代碼。
  4. 如果您使用調用上下文分析函數,則該代碼可能會提供足夠的信息。 最終,Polyspace 必須能夠看到通過常量指針x傳入的內容的大小

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM