user1
user1

Reputation: 444

Segmentation fault with shared pointers

What's wrong with this code (I minimized my whole code)? I can't figure out why pu.useIt(); causes a segmentation fault.

#include <memory>

using namespace std;

class Person {
    private:
    shared_ptr<string> name;

    public:
    void setName(shared_ptr<string> name) {
        this->name = name;
    }

    shared_ptr<string> getName() {
        return name;
    }
};

class PersonCreator {
    shared_ptr<Person> person;

    public:
    void createAmy() {
        shared_ptr<string> amysName = make_shared<string>("amy");
        person->setName(amysName);
    }
};

class PersonUser {
    public:
    void useIt() {
        PersonCreator pc;
        pc.createAmy();
    }
};

int main()
{
    PersonUser pu;
    pu.useIt();

    return 0;
}

Upvotes: 0

Views: 139

Answers (1)

rafix07
rafix07

Reputation: 20918

You need to initialize person, now it is empty, default ctor of shared_ptr means that it points to nullptr:

void createAmy() {
        shared_ptr<string> amysName = make_shared<string>("amy");
        person = std::make_shared<Person>();  // added
        person->setName(amysName);
    }

Upvotes: 2

Related Questions