C++;-检测超出范围的访问 我想分析我的C++代码,发现向量和数组中的访问不正确(超出范围访问),有没有工具?< /P>

C++;-检测超出范围的访问 我想分析我的C++代码,发现向量和数组中的访问不正确(超出范围访问),有没有工具?< /P>,c++,debugging,memory,profiling,C++,Debugging,Memory,Profiling,提前感谢是: 还有很多其他的: 还要注意的是,例如std::vector的大多数实现都有一个调试模式,在该模式下,它们将执行运行时边界检查。有一些付费工具,可以进行静态分析: IBMRationalPurify进行动态分析。如果您使用的是gcc,您可以使用定义的GLIBCXX\u DEBUG和GLIBXX\u DEBUG\u PEDANTIC进行编译。这将允许在请求越界访问时引发glibc断言 使用valgrind::memcheck进行测试还将发现内存读取错误在数组上创建一个类,并在该类中

提前感谢

是:

还有很多其他的:


还要注意的是,例如std::vector的大多数实现都有一个调试模式,在该模式下,它们将执行运行时边界检查。

有一些付费工具,可以进行静态分析:


IBMRationalPurify进行动态分析。

如果您使用的是gcc,您可以使用定义的GLIBCXX\u DEBUG和GLIBXX\u DEBUG\u PEDANTIC进行编译。这将允许在请求越界访问时引发glibc断言


使用valgrind::memcheck进行测试还将发现内存读取错误

在数组上创建一个类,并在该类中创建一些控制函数 与操作员和。。。。
使用这个类。

大多数C++实现都是带有检查的标准库实现的,你检查过你的文档吗?写得好的代码是开始的——添加断言。在运行时,您可以使用
valgrind
检查无效的内存访问。您可以“断言”代码。对于vector,您可以将[]替换为at(),它将引发异常而不是未定义的行为。这些标志非常有用,但我最近发现了一个它们会产生SEGFULTS的情况。如果您尝试将它们与boost正则表达式库一起使用,您的程序将失败。我无法想象为什么会发生这种情况,或者其他什么会受到影响。寻找details@P.ChristopoulosCharitos这是因为,正如票证中所说,Boost.Regex是使用普通ABI编译的,而
\u GLIBCXX\u DEBUG
会更改它,因此使用它的应用程序会因ABI不匹配而崩溃。