警告 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) 批註長度傳入函式的陣列。
此分析無法擷取所有可能超出界限的索引,因為並非所有算術都可以精確分析。 其已調整為報告可以保證超出界限索引的案例。 沒有警告並不表示索引保證在界限內。