コンパイラの警告 C4750

ビューの切り替え:
スクリプトなし
コンパイラの警告 C4750

エラー メッセージ

'identifier': ループにインライン展開されている _alloca() を含む関数です。

'identifier' で示されている関数により、_alloca 関数が強制的にループ内にインライン展開されます。これが原因で、ループの実行時にスタック オーバーフローが発生する可能性があります。

このエラーを解決するには

  1. 'identifier' で示されている関数が __forceinline 指定子で修飾されていないことを確認します。

  2. 'identifier' で示されている関数のループ内に _alloca 関数が含まれていないことを確認します。

  3. /O1/O2/Ox/Og のいずれのコンパイル スイッチも指定しないようにします。

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