コンパイラの警告 C4750
エラー メッセージ
'identifier': ループにインライン展開されている _alloca() を含む関数です。'identifier' で示されている関数により、_alloca 関数が強制的にループ内にインライン展開されます。これが原因で、ループの実行時にスタック オーバーフローが発生する可能性があります。
このエラーを解決するには
-
'identifier' で示されている関数が __forceinline 指定子で修飾されていないことを確認します。
-
'identifier' で示されている関数のループ内に _alloca 関数が含まれていないことを確認します。
-
_alloca 関数を try-except ステートメントに配置して、スタック オーバーフローをキャッチするようにします。
使用例
次のコード例では、ループ内で MyFunction を呼び出し、さらに、MyFunction が _alloca 関数を呼び出しています。__forceinline 修飾子が指定されているため、_alloca 関数がインライン展開されます。
// c4750.cpp
// compile with: /O2 /W2 /c
#include <intrin.h>
char * volatile newstr;
__forceinline void myFunction(void) // C4750
{
// 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;
}