4

[在这里发现重复:C++ - 检测超出范围的访问]

如果我有一个“超出范围矢量访问”的程序,如下所示:

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

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

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


PS我当然检查了断言。它没有调用。

有了这个程序:

#include <vector>

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

编译

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

所以看起来std在代码中没有断言,我不禁想知道他们为什么不做这么简单的检查。

4

2 回答 2

13

使用at()成员函数:

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

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

由于它可能会引发异常,因此您想捕获它。所以使用try{} catch{}块!

希望有帮助。

于 2013-11-06T19:50:55.853 回答
1

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

Valgrind 很容易捕捉到这些错误。赶紧跑:

valgrind ./YOUR_EXECUTABLE

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

看到这个答案

于 2014-12-08T15:39:50.433 回答