我在C ++入门课程中,我的程序在我的复制功能中是segfaulting。当我使用GDB时,它说它无法访问位于0x0的char *。奇怪的是,我之前已多次写过这个函数而没有任何错误。
class question
{
public:
question();
~question();
int set_question(char * question);
int copy_question(question & to_copy);
int clear_question();
int display();
char* retrieve_question();
char* retrieve_answer();
private:
char* your_question;
char* correct_answer;
};
///////////////////
int question::set_question(char * question)
{
your_question = new char [strlen(question)+1];
strcpy(your_question, question);
}
这是GDB中的错误代码
编程接收信号SIGSEGV,分段故障。 [切换到线程1(LWP 1)] 问题0x00013af8 :: set_question(这= 0x0,问题= 0x257a8“你喜欢电影吗?”) 在question.cpp:51
51 your_question = new char [strlen(question)+1];
(gdb)p strlen(问题)
$ 1 = 27
(gdb)p your_question
无法访问地址0x0
的内存
答案 0 :(得分:0)
我在C ++方面不专业,但在你调用成员函数set_question
之前,你是否初始化了类question
?似乎question
类未初始化。
答案 1 :(得分:0)
您正在非初始化对象上调用set_question方法。你可以从GDB输出中看到这个:
question::set_question (this=0x0, question=0x257a8 "do you like movies??")
'this'不应该是0x0
问题不在于此方法。基本上,新分配的数组不能分配给'your_question'成员,因为整个'question'对象不存在。
您可能没有做到以下几点,但这应该说明问题:
question *q = NULL;
q->set_question(...);