다음을 통해 공유


컴파일러 경고(수준 1) C4750

'identifier': 루프에 인라인된 _alloca()가 있는 함수

설명

'identifier' 함수는 루프 내에서 함수의 _alloca 인라인 확장을 강제로 실행하므로 루프가 실행될 때 스택 오버플로가 발생할 수 있습니다.

이 오류를 해결하려면

  1. 'identifier' 함수가 지정자를 사용하여 __forceinline 수정되지 않았는지 확인합니다.

  2. 'identifier' 함수에 루프에 _alloca 포함된 함수가 포함되어 있지 않은지 확인합니다.

  3. , /O2또는 /Ox/Og 컴파일 스위치를 /O1지정하지 마세요.

  4. _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;
}

참고 항목

_alloca