Avviso del compilatore (livello 1) C4750
'identifier': funzione con inlining di _alloca() in un ciclo
Osservazioni:
La funzione 'identifier' forza l'espansione inline della _alloca
funzione all'interno di un ciclo, che potrebbe causare un overflow dello stack quando viene eseguito il ciclo.
Per correggere l'errore
Assicurarsi che la funzione 'identifier' non venga modificata con l'identificatore
__forceinline
.Verificare che la funzione 'identifier' non contenga una
_alloca
funzione contenuta in un ciclo.Non specificare l'opzione
/O1
di compilazione ,/O2
/Ox
, o/Og
.Inserire la
_alloca
funzione in un'istruzione try-except che intercetta un overflow dello stack.
Esempio
Nell'esempio di codice seguente viene chiamato MyFunction
in un ciclo e MyFunction
chiama la funzione _alloca
. Il modificatore __forceinline
provoca l'espansione inline della funzione _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;
}