컴파일러 경고(수준 1) C4750
'identifier': 루프에 인라인된 _alloca()가 있는 함수
설명
'identifier' 함수는 루프 내에서 함수의 _alloca
인라인 확장을 강제로 실행하므로 루프가 실행될 때 스택 오버플로가 발생할 수 있습니다.
이 오류를 해결하려면
'identifier' 함수가 지정자를 사용하여
__forceinline
수정되지 않았는지 확인합니다.'identifier' 함수에 루프에
_alloca
포함된 함수가 포함되어 있지 않은지 확인합니다._alloca
스택 오버플로를 catch할 try-except 문에 함수를 배치합니다.
예시
다음 코드 예제는 루프에서 MyFunction
을 호출하고 MyFunction
은 _alloca
함수를 호출합니다. __forceinline
한정자로 인해 _alloca
함수의 인라인 확장이 발생합니다.
// c4750.cpp
// compile with: /O2 /W1 /c
#include <intrin.h>
char * volatile newstr;
__forceinline void myFunction(void) // C4750 warning
{
// The _alloca function does not require a __try/__except
// block because the example uses compiler option /c.
newstr = (char * volatile) _alloca(1000);
}
int main(void)
{
for (int i=0; i<50000; i++)
myFunction();
return 0;
}