Share via


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);
  }
}

스택 크기를 조정하여 이 경고를 해결하려면 다음 단계를 따릅니다.

  1. 프로젝트 메뉴에서 속성을 선택합니다.

    속성 페이지 대화 상자가 표시됩니다.

  2. 구성 속성 트리를 확장합니다.

  3. C/C++ 트리를 확장합니다.

  4. 명령줄 속성을 클릭합니다.

  5. 추가 옵션에서 /analyze:stacksize16388을 추가합니다.

참고 항목

작업

방법: 네이티브 런타임 검사 기능 사용

참조

/STACK(스택 할당)

_resetstkoflw