【问题标题】:Check STL bounds in Debug and Release with MinGW使用 MinGW 检查 Debug 和 Release 中的 STL 边界
【发布时间】:2015-10-13 22:55:47
【问题描述】:

我正在做一个遇到一些问题的项目(即定居者 2.5 回归根源)。我希望能够通过仅使用 stl 容器和边界检查来解决其中的一些问题。

那么在发布模式下是否也可以在 STL 容器中使用边界检查?所以我们可以使用一个(性能较差的)版本,它会导致它们崩溃/抛出错误吗?

构建服务器使用MinGW从linux交叉编译到windows和apple。

编辑:[]-操作符被独占使用。更改为 .at() 将需要一个大型的搜索和替换操作,该操作必须在某个时候被反转。最好是,如果有一个定义或将 []-behaviour 切换为 .at()

的东西

【问题讨论】:

标签: c++ stl indexoutofboundsexception bounds-checker


【解决方案1】:

第一种方法

您可以依靠异常来验证使用 STL 容器的边界检查。这在调试和发布模式下都启用。

例如,std::vector::at 如果超出范围,则会引发超出范围的异常。

第二种方法

如果您使用 operator[] 并且不想更改代码,则可以启用 _GLIBCXX_DEBUG 标志进行绑定检查。

【讨论】:

  • 是的,但这需要重写几乎整个代码。我想到了一面旗帜或类似的东西。
  • 所以基本上你能准确地说你在用什么吗?运算符 [] 例如?如果您有示例代码,那就太好了。我为这个案例编辑了我的答案。
  • _GLIBCXX_DEBUG 是否在 MinGW 中工作?我读到了一些容器在设置时返回错误值的问题......
  • 我不知道_GLIBCXX_DEBUG 有任何此类问题,没有人将它们报告给我们的错误数据库。需要注意的是,您必须使用 _GLIBCXX_DEBUG 重新编译所有内容,因为它会更改容器的 ABI。
  • 应该是因为这是 gcc 的一个端口。我不知道这些问题。如果你有一些链接。最好的方法是尝试一些例子:)
猜你喜欢
  • 2011-08-01
  • 1970-01-01
  • 2011-03-02
  • 2013-03-24
  • 1970-01-01
  • 2011-05-27
  • 2018-12-30
  • 2015-09-02
  • 2023-01-11
相关资源
最近更新 更多