执行函数时map / set iterator不可递增错误

时间:2017-03-31 06:04:18

标签: c++ stl

执行以下功能时发生错误: 我检查了迭代器,应该没问题,我认为问题应该是插入和擦除但我不知道如何解决它

     void addNewUser(Records *record) {

         if (mapUser.find(record->getUserName()) != mapUser.end())
             cout << "User Name has been used already!!! " << endl;
         else
            mapUser.insert(pair<string, Records*>(record->getUserName(), record));

     }

     void deleteUser(string key) {
         map<string, Records*>::iterator it = mapUser.find(key);
         map<string, Records*>::iterator end = mapUser.end();

         if (it != end) {
            delete it->second;
            it->second = NULL;
         }
         mapUser.erase(it);

     }

主要:

int main() {


DataBaseOperation *a = new DataBaseOperation();


DataBaseOperation *a = new DataBaseOperation();

Records *r = new Records(10, 1, "Ben", "Ben Li");
Records *s = new Records(1, 1, "ken", "Ken Lee");


a->addNewUser(r);
a->deleteUser(s->getUserName());

a->displayAll();

delete a;

system("pause");
return 0;}

如果我在我的主函数中调用这样的函数:

a->displayAll();
cout << endl;

a->addNewUser(r);
cout << endl;

a->displayAll();
cout << endl;

a->deleteUser(s->getUserName());
a->displayAll();

它会正常工作: enter image description here

但是如果我想单独调用函数(addNewUser和deleteUser)并且当我执行&#34; a-&gt; addNewUser(s);&#34;在主要情况下,会发生错误。

任何人都可以帮助我吗?

1 个答案:

答案 0 :(得分:2)

仅当erase指向实际元素(= it)时,才应致电end

  

迭代器pos必须有效且可解除引用。因此end()迭代器(有效但不可解除引用)不能用作pos的值。

http://en.cppreference.com/w/cpp/container/map/erase

只需移动上方erase内的if即可。