C++ 调试断言失败:映射/集迭代器不可取消引用

C++ 调试断言失败:映射/集迭代器不可取消引用,c++,C++,我正在处理一个项目,作为项目的一部分,我需要创建一个映射,第一个值是字符串,第二个值是指向类的指针 所以我声明它是mapObjlib Objectfactory类有一个名为create()的函数,它返回一个指向名为Object的类的指针 因此,我有以下代码: Object* newobject = (*Objlib.find("string")).second->create(); 这个程序编译得很好,但是我在那行代码中得到了一个运行时错误 映射/集迭代器不可取消引用 有人能帮我解决这个

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

所以我声明它是map
Objlib

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

因此,我有以下代码:

Object* newobject = (*Objlib.find("string")).second->create();
这个程序编译得很好,但是我在那行代码中得到了一个运行时错误 映射/集迭代器不可取消引用


有人能帮我解决这个问题吗?谢谢

如果带有键
“string”
的条目不在映射中,会发生什么情况?您将获得
end()
元素的迭代器。你不能去引用它

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

auto it = Objlib.find("string");
Object* newObject = it == Objlib.end() ? nullptr : it->second->create();
只有当元素存在于映射中时,才会调用
create()
方法。否则,newObject将设置为
nullptr