共用方式為


C6202

警告 C6202: 可能為堆疊配置的緩衝區 <variable> 發生緩衝區滿溢 (於 <function>呼叫中): 長度 <size> 超過緩衝區大小 <max>

這則警告表示正在將指向已知大小之堆疊緩衝區的參數傳遞至函式,而該函式複製給它的位元組比那個大小還大。 這個情況會造成緩衝區滿溢。 這項缺失可能造成遭利用的安全性弱點或程式毀損。

範例

下列程式碼會產生警告 C6202 和 C6386。 因為傳遞給函式錯誤的參數 (sizeof intArray),所以這兩則警告都表示緩衝區滿溢問題:

#include <memory.h>
void f( )
{
  int intArray[5];
  char charArray[5];

  memset ((void *)charArray, 0, sizeof intArray);
  // code ...
}

若要更正這兩則警告,請使用 sizeof charArray 傳遞正確的大小,如下列程式碼所示:

#include <memory.h>
void f( )
{
  char charArray[5];
 
  memset ((void *)charArray, 0, sizeof charArray);
}

在下列程式碼中,是使用 WritableElementsLength 屬性為函式參數 char *pC 加註。 pC 之實際可寫入項目數就是緩衝區 char *pCLen 的項目數。 在此情況下,因為 pCLen 具有的項目比可寫入參數 pC 的項目還多,所以會在呼叫位置上產生警告 C6202。

#include <codeanalysis\sourceannotations.h>
using namespace vc_attributes;
void f([Pre(WritableElementsLength="pCLen") ] char *pC, char *pCLen);

void test_f()
{
  char pc[12]; 
  char buff[17];
  f(pc, buff); // warning 6202
  // code...
}

警告 C6203 是針對非堆疊緩衝區所發出的。

請參閱

參考

C6386

C6203