STL 断言失败/异常

发布于 2024-11-15 20:19:18 字数 98 浏览 2 评论 0 原文

假设我有一个空列表 L。目前如果我运行 L.front(),它会愉快地执行并返回一个垃圾值。是否有一些我可以打开的选项,以便执行此选项会引发异常或导致断言失败?

谢谢

Suppose I've an empty list L. Currently if I run L.front(), it will merrily execute returning a garbage value. Is there some option I can turn on such that executing this would throw an exception or result in an assertion failure?

Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

思慕 2024-11-22 20:19:18

GCC STL 检查迭代器

MSVC已检查迭代器(默认打开)

STLPort 调试模式,带有检查的迭代器

< a href="https://stackoverflow.com/questions/5594686/gcc-stl-bound-checking">关于同一主题的上一个问题

美人如玉 2024-11-22 20:19:18

使用 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.

妄司 2024-11-22 20:19:18

如果您使用的是 Visual C++ 2010(可能还有更早的版本),那么您可以使用这两个宏来启用安全 SCL 和迭代器调试:

#define _SECURE_SCL 1
#define _HAS_ITERATOR_DEBUGGING 1

其他标准库也可能具有此功能。

编辑:正如所建议的,VC2010中有一个宏,即_ITERATOR_DEBUG_LEVEL,它定义了3个级别,如下所示:

#if _HAS_ITERATOR_DEBUGGING
    #define _ITERATOR_DEBUG_LEVEL 2
#elif _SECURE_SCL
    #define _ITERATOR_DEBUG_LEVEL 1
#else
    #define _ITERATOR_DEBUG_LEVEL 0
#endif

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:

#define _SECURE_SCL 1
#define _HAS_ITERATOR_DEBUGGING 1

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:

#if _HAS_ITERATOR_DEBUGGING
    #define _ITERATOR_DEBUG_LEVEL 2
#elif _SECURE_SCL
    #define _ITERATOR_DEBUG_LEVEL 1
#else
    #define _ITERATOR_DEBUG_LEVEL 0
#endif
熊抱啵儿 2024-11-22 20:19:18

一些标准库确实提供了这样的选项。您需要查阅特定实现/编译器的文档和/或代码,以确定其特征以及如何启用它。

或者,您可以使用 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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文