Compartilhar via


Aviso do compilador (nível 1) C4750

'identifier': função com _alloca() embutida dentro de um loop

Comentários

A função 'identificador' força a expansão embutida da função _alloca dentro de um loop, o que pode causar um excedente de pilha quando o loop é executado.

Para corrigir este erro

  1. Verifique se a função 'identifier' não foi modificada pelo especificador __forceinline.

  2. Verifique se a função "identifier" não contém uma função _alloca contida em um loop.

  3. Não especifique a opção de compilação /O1, /O2, /Ox ou /Og.

  4. Coloque a função _alloca em uma instrução try-except que capturará um excedente de pilha.

Exemplo

O exemplo de código a seguir chama MyFunction em um loop, e MyFunction chama a função _alloca. O modificador __forceinline causa a expansão embutida da função _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;
}

Confira também

_alloca