Compilerwarnung (Ebene 1) C4750
'identifier': Funktion mit _alloca() in eine Schleife eingebettet
Hinweise
Die Funktion "Bezeichner" erzwingt die Inlineerweiterung der _alloca
Funktion innerhalb einer Schleife, was zu einem Stapelüberlauf führen kann, wenn die Schleife ausgeführt wird.
So beheben Sie diesen Fehler
Stellen Sie sicher, dass die Funktion "Bezeichner" nicht mit dem
__forceinline
Bezeichner geändert wird.Stellen Sie sicher, dass die Funktion "Bezeichner" keine Funktion enthält
_alloca
, die in einer Schleife enthalten ist.Geben Sie weder den Switch noch
/O2
/Ox
/Og
den/O1
Kompilierungsschalter an.Platzieren Sie die
_alloca
Funktion in einer try-except-Anweisung , die einen Stapelüberlauf abfangen soll.
Beispiel
Im folgenden Codebeispiel wird MyFunction
in einer Schleife aufgerufen und MyFunction
ruft die _alloca
-Funktion auf. Der __forceinline
-Modifizierer bewirkt die Inlineerweiterung der _alloca
-Funktion.
// 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;
}