Поделиться через


Предупреждение компилятора (уровень 1) C4750

"identifier": функция с _alloca() встраиваются в цикл

Замечания

Функция "идентификатор" принудительно расширяет _alloca встроенную функцию в цикле, что может привести к переполнению стека при выполнении цикла.

Исправление ошибки

  1. Убедитесь, что функция "идентификатор" не изменяется с __forceinline помощью описателя.

  2. Убедитесь, что функция "идентификатор" не содержит _alloca функцию, содержащуюся в цикле.

  3. Не указывайте переключатель /O1компиляции , /O2/Oxили /Og параметр компиляции.

  4. Поместите функцию в инструкцию _alloca try-except, которая перехватит переполнение стека.

Пример

В следующем примере кода MyFunction вызывается в цикле, и MyFunction вызывает функцию _alloca . Модификатор __forceinline вызывает встраиваемую подстановку функции _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;
}

См. также

_alloca