2013-07-29 45 views
0

我在介绍性的C++课程中,我的程序在我的复制函数中进行了细分。当我使用GDB时,它说它无法访问地址0x0处的char *。奇怪的是我已经多次写过这个函数,没有任何错误。Segfault尝试strcpy 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 =新char [strlen(question)+1];

(GDB)p的strlen(问题)

$ 1 = 27

(GDB)p your_question

在地址0x0无法访问存储器

回答

0

I在C++中不是专业人员,但在您调用成员函数set_question之前,您是否初始化类question?看来question类没有被初始化。

0

您正在对未初始化的对象调用set_question方法。您可以从GDB输出看到这一点:

question::set_question (this=0x0, question=0x257a8 "do you like movies??") 

“这”不应该是为0x0

问题是这样的方法之外。基本上,新分配的数组不能分配给'your_question'成员,因为整个'问题'对象不存在。

你可能不这样做完全以下,但这应该说明问题:

question *q = NULL; 
q->set_question(...);