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