다음을 통해 공유


C6262

경고 C6262: <constant> 함수를 사용 하 여 바이트의 스택: 초과 /analyze: stacksize < 상수 2 >.일부 데이터를 힙으로 이동하십시오.

미리 설정 된 임계값을 초과 하는 스택 사용이이 경고를 나타냅니다 (constant 2)는 함수에서 발견 되었습니다.이 경고의 기본 스택 프레임 크기 16 KB 사용자 모드에서 커널 모드에 대 한 1KB입니다.스택-사용자 모드 에서도-스택 오버플로 예외 원인을 스택 페이지 커밋에 실패 하 고, 제한 됩니다.커널 모드 12 KB 스택 크기 제한을 증가 시킬 수는 있습니다. 따라서 코드를 커널 모드 스택 사용 적극적으로 제한 해야 합니다.

뒤이 경고가 문제를 해결 하려면 사용자가 일부 데이터 힙 또는 다른 동적 메모리 이동할 수 있습니다.사용자 모드에서 하나의 큰 스택 프레임 문제가 아닐 수도 있습니다-및이 경고를 표시 하지 않을 수 있습니다-큰 스택 프레임의 스택 오버플로 위험 늘어납니다.(함수는 스택을 많이 사용 하거나 재귀 경우 큰 스택 프레임을 발생할 수 있습니다.) 실제로 스택 오버플로가 발생 하면 되지만 시스템 한도 까지만 사용자 모드에서 전체 스택 크기를 늘릴 수 있습니다.사용할 수는 /analyze 명령줄 옵션 값을 변경 하려면 <constant 2>, 되지만 증가 위험이 오류가 보고 되지 것입니다.

커널 모드 코드에 대 한-드라이버 프로젝트의 예를 들어,-값은 <constant 2> 1 KB로 설정 됩니다.잘 작성 된 드라이버가 접근이 값이 거의 함수가 고 아래로 제한 변경 좋을 수도 있습니다.사용자 모드 코드에 대 한 스택 크기를 줄이려면 사용 되는 동일한 일반 기술을 커널 모드 코드를 수정할 수 있습니다.

예제

다음과 같은 코드 때문에이 경고가 생성 char buffer 16,382 바이트 하 고 지역 정수 변수 할당 i 다른 4 함께 기본 스택 크기 제한인 16 KB를 초과 하는 바이트를 할당 합니다.

#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. Expand C/C++.

  4. 선택 명령줄 속성.

  5. 추가 옵션, 추가 /analyze:stacksize16388.

참고 항목

작업

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

참조

/STACK(스택 할당)

_resetstkoflw