Warning C4748: /GS can not protect parameters and local variables from local buffer overrun because optimizations are disabled in function
checked 빌드로 열심히 빌드해서 테스트 중이었다.
같은 코드구만 free빌드로 컴파일을 시도했더니 발생한 에러다.
동일한 코드를 쓰는 다른 프로젝트는 잘만 빌드 되는 구만...
차이점을 찾다 보니,
디버깅할때 로컬 변수 정보가 제대로 표시되지 않아 설정했던 다음 구문이 문제였다.
#pragma optimize("", off) |
해결 방법은 optimize option을 켜던가, 아니면 문제가 발생하는 함수를
#pragma optimize("", on) |
에러의 내용은 아래를 참조.
http://msdn.microsoft.com/ko-kr/library/ms235398(VS.80).aspx
컴파일러 경고(수준 3) C4748
오류 메시지
함수에서 최적화를 사용하지 않으므로 /GS를 지정해도 로컬 버퍼 오버런에서 매개 변수 및 지역 변수를 보호할 수 없습니다.
/GS can not protect parameters and local variables from local buffer overrun because optimizations are disabled in function
기본적으로 활성화되어 있는 /GS(버퍼 보안 검사)는 함수의 최적화 기능을 사용하지 않는 한 함수의 매개 변수와 지역 변수에서 로컬 버퍼 오버런이 발생하지 않도록 보호할 수 없습니다.
함수에 jmp 또는 jcc와 같은 흐름 제어 문이 포함된 인라인 어셈블리 코드가 있는 경우 컴파일러는 최적화를 비활성화합니다.
이 경고를 해결하고 /GS를 사용하여 로컬 버퍼 오버런에서 매개 변수와 지역 변수를 보호하려면 최적화를 활성화해야 합니다.
예제
다음 샘플에서는 C4748 경고가 발생하는 경우를 보여 줍니다.
// C4748.cpp // compile with: /O2 /W3 #include <string.h> #include <stdlib.h> #pragma optimize("", off) void f(const char *str) { // C4748 warning char buf[100]; strcpy_s(buf, _countof(buf), str); } #pragma optimize("", on) int main() { f("aa"); }
'C++' 카테고리의 다른 글
std::vector (0) | 2009.08.26 |
---|---|
strcpy_s등의 _s 류의 문자열 처리함수 (4) | 2009.04.01 |
오버로드/오버라이드 (2) | 2009.04.01 |
Name Mangling(Name Decoration) (0) | 2008.10.07 |
메모리 에러 (0) | 2008.03.25 |