我不明白为什么下面的代码在使用指针对象时会产生分段错误。如果使用非指针对象,代码工作正常,但如果使用指针对象更新私有向量成员'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!
}
}
答案 0 :(得分:1)
你声明一个指针,然后永远不会初始化它
Name_pairs* pair1;
pair1->read_names();
实际上,这甚至不需要是指针
Name_pairs pair1{};
pair1.read_names();
答案 1 :(得分:1)
以下代码
Name_pairs* pair1;
仅声明指针。 紧接着的代码:
pair1->read_names();
取消引用指针。但由于指针尚未初始化为指向任何分配的内存,程序崩溃。
确保指针实际初始化为已分配的实例:
Name_pairs* pair1 = new Name_pairs();
答案 2 :(得分:0)
生成有关Name_pairs的对象是必要的。
Name_pairs* pair1;
- &GT; Name_pairs * pair1 = new Name_pairs();