2010-06-11 521 views
0

在我的代碼中,我使用了10個對象的數組xyz。當我試圖訪問數組元素使用像這樣的無符號int索引:xyz[level],我得到'Buffer overrun的警告。從邏輯上講,我很確定這個級別不會超過10.如何避免這個警告?避免'緩衝區溢出'C6386警告

+6

你可以發佈你得到警告的代碼嗎? – 2010-06-11 10:47:44

+0

不確定。這是我正在處理的一個相當大的代碼庫。我試圖用一個小例子重現它。讓我在成功時發佈。謝謝! – bdhar 2010-06-11 11:08:05

回答

9

我可能教我的奶奶在這裏班門弄斧,但千萬記住「水平不會超過10」是錯誤的大小10的陣列:

char a[10]; 
a[10] = '\0'; // Bug, and "Buffer Overrun" warning. 
+0

+1,因爲我很確定這正是OP得到警告的原因。 – 2010-06-11 11:00:39

+0

是的,這與我的問題有些相關。在訪問這個'xyz [level]'之前,我做了一個像這樣的檢查'if(level <10)',警告消失了。 – bdhar 2010-06-17 11:04:20

0

真的肯定?直到現在,我從未得到過這個警告。所以,仔細檢查。

無論如何,你可以使用

#pragma warning(disable: 6386) 

預處理指令。我通常會將此推送到「編譯指示堆棧」

#pragma warning(push) 
#pragma warning(disable : 6386) 
// Some code 
#pragma warning(pop) 

建議here

+1

這是相當危險的警告可能是由一個錯誤引起的。只有在你是**一定的時候纔會發出沉默警告**造成它們的原因是無害的。 – 2010-06-12 17:23:48