回答
如果您使用的是gcc,您可以使用_GLIBCXX_DEBUG和_GLIBXX_DEBUG_PEDANTIC进行编译。这将使得glibc断言在请求越界访问时被引发。
测试用的valgrind :: MEMCHECK也将揭示坏的内存读取
这些标志是非常有用的,但我最近发现他们产生** segfaults **的情况。如果您尝试将它们与** boost正则表达式库一起使用,则您的程序将失败。我无法想象为什么会发生这种情况,还有其他什么影响。详情请参阅https://svn.boost.org/trac/boost/ticket/5911 –
@ P.ChristopoulosCharitos发生这种情况是因为,如票据中所述,Boost.Regex是用普通的ABI编译的,而'_GLIBCXX_DEBUG'用它来改变它,因此使用它的应用程序由于ABI不匹配而崩溃。 – Ruslan
是的:Valgrind。
等等:http://en.wikipedia.org/wiki/Memory_debugger。
还要注意的是, std::vector
有一个调试模式,他们将执行运行时界限检查。
在该类0与运营商对您的阵列创建一个类,并创建一些控制功能和.... 然后使用这个类。
- 1. PHP:超出范围的变量访问
- 2. 当UITableViewCell超出范围时检测到
- 3. Objective-C - 访问/初始化超出范围问题的对象
- 4. React JS访问变量超出范围
- 5. 访问变量超出范围? nodejs
- 6. Objective-C超出范围问题
- 7. C#索引超出范围
- 8. C++超出下标范围
- 9. 访问变量超出回调范围C++
- 10. C#不能访问列表元素 - 参数超出范围
- 11. 蟒:超出范围
- 12. RowIndex超出范围
- 13. Java超出范围
- 14. 多维数组超出范围检查
- 15. NSNumber超出范围?
- 16. googletesting超出范围
- 17. Objective-C在C++中 - 超出范围
- 18. SQL超出C#中的值范围
- 19. PreparedStatement抛出索引超出范围时,它不超出范围
- 20. 如何访问超范围课程?
- 21. HyperTreeList索引超出范围的问题?
- 22. SDL_image超出范围
- 23. NSURL超出范围
- 24. nsstring - 超出范围
- 25. Javascript:超出范围?
- 26. IndexError ...超出范围,
- 27. NSDate超出范围
- 28. android:pointerIndex超出范围
- 29. 访问一个超出范围的变量Swift
- 30. 列表访问给予 - IndexError:列表索引超出范围
大多数C++实现都带有经过检查的标准库实现,您是否检查过您的文档? – PlasmaHH
写得好的代码是开始 - 自由地添加断言。在运行时,您可以使用'valgrind'来检查无效的内存访问。 –
你可以“断言”你的代码。对于vector,你可以用at替换[],这会抛出异常而不是未定义的行为。 –