避免 C6386 警告的“缓冲区溢出”问题

3

在我的代码中,我使用了一个包含10个对象的数组xyz。当我尝试使用无符号整数索引访问数组的元素时,例如:xyz[level],我会收到'缓冲区溢出'警告。从逻辑上讲,我非常确定level不会超过10。如何避免这个警告?


6
你能发布一下你收到警告的代码吗? - Dean Harding
不确定。我正在处理一个非常庞大的代码库。我正试图用一个小例子来复现它。等我成功后再发布。谢谢! - bdhar
2个回答

11

我可能是在教奶奶如何吃蛋,但请记住,“级别不会超过10”对于大小为10的数组是错误的:

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

+1,我相当确定这正是为什么原帖收到警告的原因。 - Nick Dandoulakis
是的,这与我的问题有些关联。在访问 xyz[level] 之前,我进行了类似于 if (level < 10) 的检查,警告消失了。 - bdhar
回答了我的问题 - david.pfx

3

你真的确定吗?我直到现在都没有收到这个警告。因此,请再次确认。

无论如何,你可以使用

#pragma warning( disable: 6386 )

预处理指令。我通常将其推入和弹出“编译指示堆栈”。
#pragma warning( push )
#pragma warning( disable : 6386 )
// Some code
#pragma warning( pop )

如此建议在这里


1
这是相当危险的,因为警告可能是由一个错误引起的。只有在你确信知道警告的原因并且它是无害的情况下才能消除警告。 - Michael J

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接