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 ...
}
}