分享方式:


警告 C6201

索引 'index-name' 超出可能堆棧配置緩衝區 'variable' 的有效索引範圍 'minimum' 到 'maximum'

這個警告表示指定堆疊陣列中的整數位移超過該陣列的最大界限。 這可能會造成堆疊溢位錯誤、未定義的行為或當機。

備註

此瑕疵的其中一個常見原因是使用數位的大小做為陣列的索引。 由於 C/C++ 陣組索引編制是以零起始,陣列中最大的合法索引小於數位元素的數目。

程式代碼分析名稱: INDEX_EXCEEDS_MAX

範例

下列程式代碼會產生警告 C6201。 迴圈for條件在設定i為 14 時超過 的有效索引範圍buff,也就是結束之後的一個專案:

void f()
{
    int buff[14]; // array of 0..13 elements
    for (int i = 0; i <= 14; i++) // i == 14 exceeds the bounds
    {
        buff[i] = 0; // initialize buffer
    }
}

若要更正警告,請確定索引會保留在界限中。 下列程式代碼顯示更正的循環條件:

void f()
{
    int buff[14]; // array of 0..13 elements
    for (int i = 0; i < 14; i++) // i == 13 on the final iteration
    {
        buff[i]= 0; // initialize buffer
    }
}

啟發學習法

此分析僅限於堆疊配置的陣列。 例如,它不會考慮使用 Microsoft 原始程式碼註釋語言 (SAL) 批註長度傳入函式的陣列。

此分析無法擷取所有可能超出界限的索引,因為並非所有算術都可以精確分析。 其已調整為報告可以保證超出界限索引的案例。 沒有警告並不表示索引保證在界限內。