C6201
경고 C6201: 스택에 할당되었을 가능성이 있는 <variable>에 대해 버퍼 오버런이 발생했습니다. 인덱스 <name>이(가) 유효한 인덱스 범위 <min> - <max>을(를) 벗어납니다.
이 경고는 지정된 스택 배열에 대한 정수 오프셋이 해당 배열의 최대 범위를 초과한다는 것을 나타냅니다. 이 오류로 인해 임의의 동작이나 충돌이 발생할 수 있습니다.
이 오류의 일반적인 원인 중 하나는 배열의 크기를 배열에 대한 인덱스로 사용했기 때문입니다. 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 ...
}
}