Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
"identifier": функция с _alloca() встраиваются в цикл
Замечания
Функция "идентификатор" принудительно расширяет _alloca встроенную функцию в цикле, что может привести к переполнению стека при выполнении цикла.
Исправление ошибки
Убедитесь, что функция "идентификатор" не изменяется с
__forceinlineпомощью описателя.Убедитесь, что функция "идентификатор" не содержит
_allocaфункцию, содержащуюся в цикле.Не указывайте переключатель
/O1компиляции ,/O2/Oxили/Ogпараметр компиляции.Поместите функцию в инструкцию
_allocatry-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;
}