为什么 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();
我不明白为什么下面的代码在使用指针对象时会出现分段错误。如果使用非指针对象,代码工作正常,但如果使用指针对象更新私有向量成员 '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();