Debug Assertion Failed:map / set iterator not dereferencable

时间:2014-03-02 22:25:04

标签: c++

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

所以我宣布它为地图<string, Objectfactory*> Objlib

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

所以我有以下代码:

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

该程序编译得很好,但我在该行代码中得到运行时错误 地图/集合迭代器不可解除引用。

任何人都可以帮我解决这个问题吗?谢谢!

1 个答案:

答案 0 :(得分:2)

如果地图中没有包含密钥"string"的条目会怎样?您将获得end()元素的迭代器。你无法取消引用它。

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

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

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