Avertissement du compilateur (niveau 1) C4750
'identifier' : fonction avec _alloca() inline dans une boucle
Notes
La fonction « identificateur » force l’expansion inline de la _alloca
fonction dans une boucle, ce qui peut entraîner un dépassement de capacité de pile lorsque la boucle est exécutée.
Pour corriger cette erreur
Vérifiez que la fonction « identificateur » n’est pas modifiée avec le
__forceinline
spécificateur.Vérifiez que la fonction « identificateur » ne contient pas de
_alloca
fonction contenue dans une boucle.Ne spécifiez pas le
/O1
commutateur ,/O2
ou/Ox
/Og
le commutateur de compilation.Placez la
_alloca
fonction dans une instruction try-except qui intercepte un dépassement de capacité de pile.
Exemple
L’exemple de code suivant appelle MyFunction
dans une boucle, et MyFunction
appelle la fonction _alloca
. Le modificateur __forceinline
provoque l’expansion inline de la fonction _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;
}