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);
}
}
스택 크기를 조정 하 여이 경고를 해결 하려면
메뉴 표시줄에서 선택 프로젝트, 속성.
속성 페이지 대화 상자가 표시됩니다.
확장 구성 속성.
Expand C/C++.
선택 명령줄 속성.
추가 옵션, 추가 /analyze:stacksize16388.