Freigeben über


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

  1. Stellen Sie sicher, dass die Funktion "Bezeichner" nicht mit dem __forceinline Bezeichner geändert wird.

  2. Stellen Sie sicher, dass die Funktion "Bezeichner" keine Funktion enthält _alloca , die in einer Schleife enthalten ist.

  3. Geben Sie weder den Switch noch /O2/Ox/Og den /O1Kompilierungsschalter an.

  4. 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;
}

Siehe auch

_alloca