如何检查std :: vector超出范围访问权限

时间:2013-11-06 19:48:40

标签: c++ std outofrangeexception

[在此发现一个疑问:C++ - detect out-of-range access]

如果我的程序设置为"超出范围矢量访问",就像这样:

  std::vector<int> A(2);
  ...
  A[10] = 3;

我有办法确定找到这个错误吗? 我的意思是在调试模式下编译,看看是否某些断言停止了执行。

到目前为止,我已经自己查了一下。但是,我可能不必编写额外的代码吗?


P.S。我当然检查过断言。它没有被召唤。

通过这个程序:

#include <vector>

int main() {
  std::vector<int> A(2);
  A[10] = 3;
  return 0;
}

编译
g++ 1.cpp -O0; ./a.out

所以看起来std在代码中没有断言,我无法理解为什么他们不做这么简单的检查。

2 个答案:

答案 0 :(得分:13)

使用at()成员函数:

std::vector<int> A(2);

A.at(10) = 3;  //will throw std::out_of_range exception!

因为它可能会抛出异常,所以你想抓住它。所以使用try{} catch{}阻止!

希望有所帮助。

答案 1 :(得分:1)

  

我有办法确定找到这个错误吗?我的意思是在调试模式下编译并查看某些断言是否会停止执行。

Valgrind很容易发现这些错误。跑吧:

valgrind ./YOUR_EXECUTABLE
  

我不禁想知道为什么他们不做这么简单的检查。

请参阅此answer