Udostępnij za pomocą


Ostrzeżenie kompilatora (poziom 1) C4750

"identifier": funkcja z _alloca() wstawiona do pętli

Uwagi

Funkcja "identifier" wymusza wbudowane rozszerzenie _alloca funkcji w pętli, co może spowodować przepełnienie stosu podczas wykonywania pętli.

Aby poprawić ten błąd

  1. Upewnij się, że funkcja "identifier" nie została zmodyfikowana za pomocą specyfikatora __forceinline .

  2. Upewnij się, że funkcja "identifier" nie zawiera _alloca funkcji zawartej w pętli.

  3. Nie określaj przełącznika /O1kompilacji , /O2, /Oxlub /Og .

  4. _alloca Umieść funkcję w instrukcji try-except, która przechwyci przepełnienie stosu.

Przykład

Poniższy przykład kodu wywołuje MyFunction pętlę i MyFunction wywołuje _alloca funkcję. Modyfikator __forceinline powoduje rozszerzenie wbudowane funkcji _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;
}

Zobacz też

_alloca