【问题标题】:The end of std::map is shifted [duplicate]std::map 的结尾被移动[重复]
【发布时间】:2012-08-31 20:48:24
【问题描述】:

可能重复:
discover when the element is inserted to the std::map

我跟踪在地图中插入 137 个元素当我使用 VS2010 调试器检查地图的大小时,我确实得到了 137。使用 printf 我打印地图的所有元素

(it = map.begin();it !=map.end();++it) {
   printf ("%x",it->second);
}

因此打印了 137 个值。 之后我的程序继续执行。在执行结束时我需要处理地图的值。

我再次使用调试器检查它有 137 个元素,但是当我像以前一样打印所有这些元素时,我打印了 138 个值,而最后一个是无效值。

我需要了解它是如何/何时发生的,以及是什么导致map.end() 被转移。

【问题讨论】:

  • 向我们展示两个“打印”之间的代码
  • 你是否在不必要地使用operator[]
  • 是不是类似于while (map[i++] != NULL)
  • 你为什么不调试它并找出这个额外元素来自哪里?
  • 我看不出这个问题有什么不同。无论哪种方式,除非您发布一些重现问题的代码,否则没有人可以回答任何一个问题。

标签: c++ visual-studio-2010 map iterator


【解决方案1】:

没有代码很难分辨。我们可以猜测。 我建议您重写添加到地图的运算符,并在每次添加后检查地图的大小。当大小大于 137 时,会导致您的程序使用 GPF(或调用将导致调试器中断的函数。)在调试器中运行您的程序,然后宾果游戏,堆栈跟踪会告诉您问题出在哪里。

【讨论】:

    猜你喜欢
    • 2021-12-23
    • 2014-08-25
    • 1970-01-01
    • 1970-01-01
    • 2023-03-20
    • 2023-04-10
    • 2018-02-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多