【问题标题】:Avoiding 'Buffer Overrun' C6386 warning避免“缓冲区溢出”C6386 警告
【发布时间】:2010-06-11 10:43:15
【问题描述】:

在我的代码中,我使用了一个包含 10 个对象的数组 xyz。当我尝试使用这样的无符号整数索引访问数组元素时:xyz[level],我收到'Buffer overrun'警告。从逻辑上讲,我很确定该级别不会超过 10。如何避免此警告?

【问题讨论】:

  • 你能把收到警告的代码贴出来吗?
  • 不确定。这是我正在处理的一个相当大的代码库。我试图用一个小例子来重现它。当我成功时让我发布它。谢谢!

标签: c++ windows visual-c++ warnings buffer-overrun


【解决方案1】:

我可能在这里教我的祖母吸鸡蛋,但请记住“级别不会超过 10”对于大小为 10 的数组是错误的:

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

【讨论】:

  • +1,因为我很确定这正是 OP 收到警告的原因。
  • 是的,这与我的问题有些相关。在像这样xyz[level] 访问之前,我做了这样的检查if (level < 10),警告消失了。
  • 回答了我的问题
【解决方案2】:

你真的确定吗?直到现在我才收到这个警告。所以,请仔细检查。

无论如何,你可以使用

#pragma warning( disable: 6386 )

预处理器指令。我通常将其推送并弹出到“pragma stack”

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

建议here。

【讨论】:

  • 这是相当危险的,因为警告可能是由错误引起的。仅当您确定是什么导致警告并且它是无害的时,才可以消除警告。
猜你喜欢
  • 1970-01-01
  • 2017-06-16
  • 1970-01-01
  • 2021-03-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-11
  • 2021-09-19
相关资源
最近更新 更多