2011-09-21 77 views
3

我想分析我的C++代码以查找向量和数组中的访问不良(超出范围访问),是否有一个工具呢?C++ - 检测超出范围的访问

在此先感谢

+2

大多数C++实现都带有经过检查的标准库实现,您是否检查过您的文档? – PlasmaHH

+2

写得好的代码是开始 - 自由地添加断言。在运行时,您可以使用'valgrind'来检查无效的内存访问。 –

+2

你可以“断言”你的代码。对于vector,你可以用at替换[],这会抛出异常而不是未定义的行为。 –

回答

10

如果您使用的是gcc,您可以使用_GLIBCXX_DEBUG和_GLIBXX_DEBUG_PEDANTIC进行编译。这将使得glibc断言在请求越界访问时被引发。

测试用的valgrind :: MEMCHECK也将揭示坏的内存读取

+1

这些标志是非常有用的,但我最近发现他们产生** segfaults **的情况。如果您尝试将它们与** boost正则表达式库一起使用,则您的程序将失败。我无法想象为什么会发生这种情况,还有其他什么影响。详情请参阅https://svn.boost.org/trac/boost/ticket/5911 –

+0

@ P.ChristopoulosCharitos发生这种情况是因为,如票据中所述,Boost.Regex是用普通的ABI编译的,而'_GLIBCXX_DEBUG'用它来改变它,因此使用它的应用程序由于ABI不匹配而崩溃。 – Ruslan

0

在该类0​​与运营商对您的阵列创建一个类,并创建一些控制功能和.... 然后使用这个类。