STL 断言失败/异常
假设我有一个空列表 L。目前如果我运行 L.front(),它会愉快地执行并返回一个垃圾值。是否有一些我可以打开的选项,以便执行此选项会引发异常或导致断言失败?
谢谢
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
假设我有一个空列表 L。目前如果我运行 L.front(),它会愉快地执行并返回一个垃圾值。是否有一些我可以打开的选项,以便执行此选项会引发异常或导致断言失败?
谢谢
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(4)
GCC STL 检查迭代器
MSVC已检查迭代器(默认打开)
STLPort 调试模式,带有检查的迭代器
< a href="https://stackoverflow.com/questions/5594686/gcc-stl-bound-checking">关于同一主题的上一个问题
GCC STL checked iterators
MSVC checked iterators ( on by default )
STLPort debug mode, with checked iterators
Previous question on the same subject
使用
empty()
检查列表是否为空。size()
在这里并不好,因为它可能具有线性运行时间。请参阅有效 STL 了解更多详细信息。empty()
具有恒定的运行时间,并且它是标准方法。Use
empty()
to check if the list is empty.size()
is not good here because it could have linear runtime. See more details in Effective STL.empty()
has constant runtime and it is a standard way.如果您使用的是 Visual C++ 2010(可能还有更早的版本),那么您可以使用这两个宏来启用安全 SCL 和迭代器调试:
其他标准库也可能具有此功能。
编辑:正如所建议的,VC2010中有一个宏,即_ITERATOR_DEBUG_LEVEL,它定义了3个级别,如下所示:
If you are using Visual C++ 2010 (and probably earlier versions) then you can enable secure SCL and iterator debugging by using these two macros:
The other standard libraries may have that too.
Edit: Just as has been suggested, there is a single macro in VC2010, that is
_ITERATOR_DEBUG_LEVEL
which has 3 levels defined like this:一些标准库确实提供了这样的选项。您需要查阅特定实现/编译器的文档和/或代码,以确定其特征以及如何启用它。
或者,您可以使用 valgrind 或 Purify 等内存检查器,而不是在库级别执行此操作。
Some standard libraries do offer such an option. You'd need to consult the documentation and/or code foryour particular implementation/compiler in order to determine its characteristics and how to enable it.
Alternately you could use a memory checker like valgrind or Purify instead of doing it in the library level.