C6262
関数 C6262: 関数はスタックの <定数> バイトを使用します: /analyze:stacksize<定数> を超えています。 データの一部をヒープに移動することを考慮してください
この警告は、スタックの使用サイズが、あらかじめ設定されたしきい値を超えたことが関数の内部で検出されたことを示します。 この警告が発生する既定のスタック サイズは 16K バイトです。 スタックのサイズはユーザー モードでも限定されています。スタックのページのコミットに失敗した場合、スタック オーバーフロー例外が発生します。 _resetstkoflw 関数は、スタック オーバーフローが発生した状態からプログラムを回復させ、実行中の操作を致命的な例外エラーが発生したとして失敗させるのではなく、続行できるようにします。 _resetstkoflw 関数を呼び出さなければ、前回の例外の後にガード ページは作成されません。 次にスタック オーバーフローが発生したときに例外は発生しないので、プロセスは警告なしで終了します。
この警告を修正するには、一部のデータをヒープに移動するか、スタック サイズを大きくします。 どちらの場合でも、コードに変更を加える前に、選択した方法の利点と欠点を検討する必要があります。
使用例
次に示すコードでは、char buffer によって 16382 バイトが割り当てられ、ローカルの整数変数 i によってさらに 4 バイトが割り当てられるため、合計すると既定のスタック サイズの限度である 16K バイトを超え、この警告が生成されます。
#include <windows.h>
#define MAX_SIZE 16382
void f( )
{
int i;
char buffer[MAX_SIZE];
i = 0;
buffer[0]='\0';
// code...
}
次に示すコードでは、一部のデータをヒープに移動することでこの警告を修正しています。
#include <stdlib.h>
#include <malloc.h>
#define MAX_SIZE 16382
void f( )
{
int i;
char *buffer;
i = 0;
buffer = (char *) malloc( MAX_SIZE );
if (buffer != NULL)
{
buffer[0] = '\0';
// code...
free(buffer);
}
}
スタック サイズを調整してこの警告を修正するには、次の手順に従ってください。
[プロジェクト] メニューの [プロパティ] をクリックします。
[プロパティ ページ] ダイアログ ボックスが表示されます。
[構成プロパティ] ツリーを展開します。
[C/C++] ツリーを展開します。
[コマンド ライン] プロパティをクリックします。
[追加のオプション] に、/analyze:stacksize16388 を追加します。