为什么 class object as pointer 会产生分段错误,而通常的 class object 不会

Why class object as pointer gives segmentation error, when the usual class object does not

我不明白为什么下面的代码在使用指针对象时会出现分段错误。如果使用非指针对象,代码工作正常,但如果使用指针对象更新私有向量成员 'name',则会出现分段错误。 我让指针起作用的唯一方法是为向量成员 'name' 创建一个 getter 函数,并将其用作 read_names() 函数的参数。

CPP专家能解释一下为什么会这样吗..?

这是cpp文件。

#include "iostream"
#include "string"
#include "vector"

using namespace std;
#include "name_pairs.h"


int main()
{
    // The 2 lines below here is what works.
    // Name_pairs pair1;
    // pair1.read_names();

    //This part below gives segmentation fault.
    Name_pairs* pair1; 
    pair1->read_names();
    delete pair1;
    return 0;
}

这是头文件。

class Name_pairs
{
public:
    void read_names();
    // prompts the user for an age for each name. 

    void print();

private:

    vector<string> name;
    vector<double> age;

};

void Name_pairs::read_names()
{
    // string in;
    for (string in; cin>>in;)
    {
        name.push_back(in); //segmentation fault occurs here! 

    }
}

你声明了一个指针然后从不初始化它

Name_pairs* pair1; 
pair1->read_names();

事实上,这甚至不需要是一个指针

Name_pairs pair1{};
pair1.read_names();

代码如下

Name_pairs* pair1;

只声明了一个指针。 紧随其后的代码:

pair1->read_names();

取消引用指针。但是由于指针尚未初始化以指向任何已分配的内存,因此您的程序崩溃了。

确保您的指针实际初始化为分配的实例:

Name_pairs* pair1 = new Name_pairs();

需要生成关于Name_pairs的对象。

Name_pairs* pair1;

-> Name_pairs* pair1 = new Name_pairs();