2010-06-11 866 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