C6201
警告 C6201: <変数> のバッファー オーバーランです。スタックが割り当てられた可能性があります。インデックス <名前> は、有効なインデックスの範囲 <min> から <max> を超えています。
この警告は、指定されたスタック配列に対する整数オフセットが、その配列の範囲の最大値を超えていることを示します。この問題により、ランダムな動作やクラッシュが発生する場合があります。
この問題の一般的な原因の 1 つは、配列のサイズを配列のインデックスとして使用することです。C/C++ の配列のインデックスは 0 から始まるため、配列のインデックスの正しい最大値は配列の要素数より 1 だけ小さくなります。
使用例
次に示すコードでは、配列のインデックスが有効な範囲を越えているため、この警告が生成されます。
void f( )
{
int buff[25];
for (int i=0; i <= 25; i++) // i exceeds array bound
{
buff[i]=0; // initialize i
// code ...
}
}
この警告を解決するには、次のコードに示すように正しい配列サイズを使用します。
void f( )
{
int buff[25];
for (int i=0; i < 25; i++)
{
buff[i]=0; // initialize i
// code ...
}
}