C6262
警告 C6262: 函式使用 <constant> 個位元組的堆疊: 超過 /analyze:stacksize<constant>。 請考慮將部分資料移至堆積
這則警告表示在函式內部偵測到堆疊的使用方式已超過預設臨界值, 而它預設的堆疊大小為 16K 位元組。 即使是在使用者模式中,堆疊還是會受到限制,且無法認可堆疊分頁會造成堆疊溢位 (Stack Overflow) 例外狀況 (Exception)。 _resetstkoflw 函式可從堆疊溢位的情況中復原,讓程式得以繼續執行,不會因嚴重的例外狀況錯誤而失敗。 如果未呼叫 _resetstkoflw 函式,則在上述的例外狀況之後不會產生保護分頁。 下次發生堆疊溢位時,完全不會有例外狀況,且會在沒有產生警告的情況下結束此處理序 (Process)。
若要更正這則警告,您可以將部分資料移至堆積,或增加堆疊大小。 無論是哪種處理方式,在變更程式碼之前,應該將要採用之方法的優缺點納入考慮。
範例
下列程式碼會產生這則警告,因為 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。