C++ vector 调试实现

标签 c++ debugging vector iterator

在学习 C++ 时,我经历了学习什么是迭代器以及如何使用它们的痛苦。然后,我经历了学习什么函数调用无效迭代器的痛苦,并快速发现它们。我最近一直在关注问题,并注意到一个非常普遍的主题是人们没有意识到调用vector::erase() 会使迭代器无效。 这让我想知道是否有vector调试实现 运行时 检查 vector 有效性?

我最初的想法是,它必须是 vector 的包装器,基本上跟踪所有现有的迭代器,并在执行使它们无效的操作时设置 isValid bool 值。然后,在取消引用或递增时,可以检查 isValid

这将有助于诊断更隐蔽的错误,其中 erase() 调用嵌套(意外或无意地)在函数调用的深处,而同一 vector 正在迭代。

有没有人知道这样的实现,或者为什么不应该使用它的任何原因?

编辑:我正在使用 linux 和 g++。

最佳答案

Microsoft 的实现会进行一些调试检查(refref)。它专门检查范围,所以我不确定 erase() 场景是否适合。

编辑 jalf 的贡献:

GCC(和 g++)似乎具有类似的功能:

stackoverflow.com/questions/2567997/

gcc.gnu.org/onlinedocs/libstdc++/manual/debug_mode.html

关于C++ vector 调试实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4726428/

相关文章:

c++ - Worker/Controller 多线程和接口(interface)类

c++ - 使用gcc-11构建c++20模块时如何修改gcm.cache路径?

c++ - 为字符串参数重载 sqrt 函数

c++ - 新旧位置之间的速度

c++ - 捕获并格式化 cout

c# - Windows 窗体 + 来自 C# 控制台的命令

在 FireFox 之外进行 Javascript 调试

javascript - 调试 Bootstrap 3 模板

c++ - 围绕另一个 vector 旋转一个 vector

java - Vector 与 ArrayList 哪个更好?