【问题标题】:Debug Assertion Failed: map/set iterator not dereferencable调试断言失败:映射/设置迭代器不可取消引用
【发布时间】:2014-04-03 18:35:08
【问题描述】:

我正在做一个项目,作为其中的一部分,我需要创建一个映射,其中第一个值作为字符串,第二个值是指向类的指针。

所以我把它声明为 map<string, Objectfactory*> Objlib

Objectfactory 类有一个名为 create() 的函数,它返回一个指向名为 Object 的类的指针。

所以我有以下代码:

Object* newobject = (*Objlib.find("string")).second->create();

程序编译得很好,但我在该行代码中得到一个运行时错误,说 map/set 迭代器不可取消引用。

谁能帮我解决这个问题?谢谢!

【问题讨论】:

    标签: c++


    【解决方案1】:

    如果带有键 "string" 的条目不在地图中会怎样?您将获得一个指向 end() 元素的迭代器。你不能取消引用它。

    所以,在取消引用之前检查您的地图是否包含该元素:

    auto it = Objlib.find("string");
    Object* newObject = it == Objlib.end() ? nullptr : it->second->create();
    

    仅当元素存在于地图中时才会调用create() 方法。否则,newObject 设置为nullptr

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多