C6262
경고 C6262: 함수에서 <constant>바이트의 스택을 사용하는데 이 크기가 /analyze:stacksize<constant>을(를) 초과합니다. 일부 데이터를 힙으로 이동하십시오.
이 경고는 함수 내에서 사전 설정된 임계값을 초과하는 스택 사용이 발견되었음을 나타냅니다. 이 경고의 기본 스택 크기는 16000바이트입니다. 사용자 모드인 경우에도 스택은 제한되며 스택 페이지 커밋에 실패하면 스택 오버플로 예외가 발생할 수 있습니다. _resetstkoflw 함수는 스택 오버플로 상태를 복구하여 프로그램이 치명적 예외 오류와 함께 실패하는 대신 계속 실행되도록 합니다. _resetstkoflw 함수를 호출하지 않으면 앞의 예외 다음에는 가드 페이지가 없게 됩니다. 다음에 스택 오버플로가 발생하면 예외가 전혀 발생하지 않고 프로세스가 경고 없이 종료됩니다.
이 경고를 해결하려면 일부 데이터를 힙으로 이동하거나 스택 크기를 늘립니다. 어떤 방법을 사용하든지 코드를 변경하기 전에 각 방법의 장점과 단점을 고려해야 합니다.
예제
다음 코드에서는 char buffer가 16382바이트를 할당하고 지역 정수 변수 i가 4바이트를 더 할당하여 기본 스택 크기 제한인 16K바이트를 초과하기 때문에 이 경고가 생성됩니다.
#include <windows.h>
#define MAX_SIZE 16382
void f( )
{
int i;
char buffer[MAX_SIZE];
i = 0;
buffer[0]='\0';
// code...
}
다음 코드에서는 일부 데이터를 힙으로 이동하여 이 경고를 해결합니다.
#include <stdlib.h>
#include <malloc.h>
#define MAX_SIZE 16382
void f( )
{
int i;
char *buffer;
i = 0;
buffer = (char *) malloc( MAX_SIZE );
if (buffer != NULL)
{
buffer[0] = '\0';
// code...
free(buffer);
}
}
스택 크기를 조정하여 이 경고를 해결하려면 다음 단계를 따릅니다.
프로젝트 메뉴에서 속성을 선택합니다.
속성 페이지 대화 상자가 표시됩니다.
구성 속성 트리를 확장합니다.
C/C++ 트리를 확장합니다.
명령줄 속성을 클릭합니다.
추가 옵션에서 /analyze:stacksize16388을 추가합니다.