Advertencia del compilador (nivel 1) C4750
"identifier": función con _alloca() insertada en un bucle
Comentarios
La función "identifier" fuerza la expansión insertada de la función _alloca
dentro de un bucle, lo que podría producir un desbordamiento de pila cuando se ejecute el bucle.
Para corregir este error
Asegúrese de que la función "identifier" no se modifica con el especificador
__forceinline
.Asegúrese de que la función "identifier" no contiene una función
_alloca
que está contenida en un bucle.No especifique el modificador de compilación
/O1
,/O2
,/Ox
o/Og
.Coloque la función
_alloca
en una instrucción try-except que descubrirá un desbordamiento de pila.
Ejemplo
El siguiente ejemplo de código llama a MyFunction
en un bucle y MyFunction
llama a la función _alloca
. El modificador __forceinline
hace que la expansión inline de la función _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;
}