共用方式為


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);
  }
}

若要藉由調整堆疊大小以更正這則警告,請遵循以下步驟:

  1. 在 [專案] 功能表上,按一下 [屬性]。

    [屬性頁] 對話方塊隨即顯示。

  2. 展開 [組態屬性] 樹狀目錄。

  3. 展開 [C/C++] 樹狀目錄。

  4. 按一下 [命令列] 屬性。

  5. 在 [其他選項] 中加入 /analyze:stacksize16388。

請參閱

工作

HOW TO:使用原生執行階段檢查

參考

/STACK (堆疊配置)

_resetstkoflw