C++ - 检测数组越界访问

3
我希望能分析我的C++代码,以查找向量和数组中的错误访问(超出范围的访问),是否有相关工具可以使用?
提前感谢您。

2
大多数C++实现都带有一个经过检查的标准库实现,你是否已经查看了你的文档? - PlasmaHH
2
良好的编码是开始 - 大量添加断言。在运行时,您可以使用 valgrind 检查无效的内存访问。 - Kerrek SB
2
你可以使用“assert”来检查你的代码。对于向量,你可以用at()代替[],这将抛出异常而不是未定义的行为。 - Alessandro Teruzzi
4个回答

10
你可以在使用gcc时定义_GLIBCXX_DEBUG和_GLIBXX_DEBUG_PEDANTIC进行编译。这将启用glibc断言,如果请求超出边界的访问,则会引发断言。
使用valgrind::memcheck测试还会揭示坏的内存读取。

1
这些标志非常有用,但我最近发现了一个情况,它们会产生段错误。如果您尝试将它们与boost regex库一起使用,您的程序将失败。我无法想象为什么会发生这种情况或其他受影响的事情。请参见https://svn.boost.org/trac/boost/ticket/5911获取详细信息。 - Pan. Christopoulos Charitos
@P.ChristopoulosCharitos,这是因为如票据所述,Boost.Regex使用普通ABI进行编译,而_GLIBCXX_DEBUG更改了它,因此使用它的应用程序由于ABI不匹配而崩溃。 - Ruslan

6

2

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

Klockwork

Coverity

IBM Rational Purify 可以进行动态分析。


0
创建一个关于数组的类,并在该类中创建一些控制函数和运算符,然后使用这个类。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接