【问题标题】:Bypassing list iterator dereferencing error in Visual C++ 2010绕过 Visual C++ 2010 中的列表迭代器取消引用错误
【发布时间】:2011-07-05 00:13:32
【问题描述】:

当我取消引用列表迭代器时,我收到一条错误消息,指出无法取消引用迭代器。但是,当我构建发布版本时不会发生这种情况,只会在调试版本上发生。

有什么办法可以绕过这个错误吗?

【问题讨论】:

  • 发布一段最小的、可编译的代码来演示这个问题。取消引用迭代器不应导致错误。
  • 这个错误可能来自 Visual C++ 的库调试模式,它比其他一些库放入了更多的断言。您必须在代码中做错事才会触发错误。
  • 好吧,我正在尝试通过以下方式比较同一列表的两个元素: if ( (*it) == (*it2) )
  • 那么它们可能不是列表的元素,可能是列表的end()迭代器?
  • 在调试模式下出现取消引用错误是有原因的。有额外的检查来确保您没有取消引用无效的迭代器。 99.99999999999% 可能是您的代码中的错误,而不是编译器的错误。

标签: visual-c++ list iterator


【解决方案1】:

您不想绕过此检查。它告诉您您的代码有问题,并且只会在发布模式下消失。实际发生的情况是,您得到的未定义行为似乎按您希望的方式工作。事实上,它会在未来某个不可预知的时刻失败,从而导致您更加痛苦,并且可能需要花费大量时间进行调试。

【讨论】:

    猜你喜欢
    • 2013-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-01
    相关资源
    最近更新 更多