반응형

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)
func()
{
}
#pragma optimize("", off)

로 감싸주면 된다.

에러의 내용은 아래를 참조.


 



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

+ Recent posts