Debugging ';向认为无效参数是致命的函数传递了无效参数';通过迭代一个映射

Debugging ';向认为无效参数是致命的函数传递了无效参数';通过迭代一个映射,debugging,dictionary,exception,stl,Debugging,Dictionary,Exception,Stl,我试图用一个字符串作为键,一个指向“Drug”的指针作为值来迭代一个映射,当我初始化映射的迭代器时,当我调试时,我在“it”的值上得到问号,当我继续时,调试器指向“for”循环的行,并显示上面给出的异常 map<string, Drug *>::iterator it = patient->getDrugs().begin(); for (it; it != patient->getDrugs().end(); it++) cout << "Drug ID

我试图用一个字符串作为键,一个指向“Drug”的指针作为值来迭代一个映射,当我初始化映射的迭代器时,当我调试时,我在“it”的值上得到问号,当我继续时,调试器指向“for”循环的行,并显示上面给出的异常

map<string, Drug *>::iterator it = patient->getDrugs().begin();
for (it; it != patient->getDrugs().end(); it++)
  cout << "Drug ID: " << it->first << " Drug name: " << it->second->getName() << endl;
map::iterator it=patient->getdruges().begin();
for(it;it!=患者->获取药物().end();it++)

有可能
patient->getDruges()
会按值返回吗?我怀疑是的,在这种情况下,每次调用它时都会创建一个新的映射实例。这意味着
patient->getDruges().begin()
patient->getDruges().end()
不能在同一个容器上形成有效范围-它们来自不同的容器。而且,它们是悬而未决的迭代器——实际的容器在迭代器可以使用之前就被销毁了。是的。但是如果我通过引用将RV更改为,它必须是
const map&Patient::getDruges()const{return this->drugs;}
,在这种情况下,我将无法更改它(添加、删除映射中的元素等),是吗?(
Patient
是此函数所属类的名称)为什么必须如此?您可以通过非常量引用返回。