调用简单getter方法后出错:basic_string::_S_create

error after calling simple getter method: basic_string::_S_create

本文关键字:basic create string 出错 简单 getter 方法 调用      更新时间:2023-10-16

我有一个简单的函数,可以使用getter方法打印出一个人的名字。它第一次打印出名称很好,但第二次它抛出错误并停止工作。

调试器显示,在进行初始调用后,人名的值从原来的值变为一堆随机字母和数字。

任何帮助都将不胜感激。

error basic_string::_S_create

string personName("Jim");
// check if person already exists (will return NULL in
// the case of Jim during this test)
Person *person = personList.getPerson(personName);
if(!person)
{
    cout << "creating new person" << endl;
    person = createPerson(personName);
    cout << person->getName() << endl; // prints 'Jim'
    cout << person->getName() << endl; // stops working here.
}
Person* createPerson(string name)
{
    Person person(name);
    personList.addPerson(person);
    Person *foundPerson = personList.getPerson(name);
    return foundPerson;
}

PersonList

...
void PersonList::addPerson(Person& person)
{
    Person *person_ptr = &person;
    personList.push_back(person_ptr);
}
Person* PersonList::getPerson(string name)
{
    for(vector<Person*>::iterator it = personList.begin(); it != personList.end(); ++it)
    {
        if((*it)->getName() == name)
        {
            return *it;
        }
    }
}
...

个人

class Person
{
public: 
    Person(string _name)
    string getName() const;
    ...
private:
    string name;
    ...
}
...
Person::Person(string _name)
:name(_name)
{
}
string Person::getName() const
{
    return name;
}
...

将添加人员更改为:

void PersonList::addPerson(Person& person)
{
    Person *person_ptr = new Person(person);
    personList.push_back(person_ptr);
}