0

我正在上 C++ 入门课程,我的程序在我的复制功能中出现了段错误。当我使用 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 in question::set_question (this=0x0, question=0x257a8 "do you like movies??") at question.cpp:51

51 your_question = 新字符 [strlen(question)+1];

(gdb) p strlen(问题)

$1 = 27

(gdb) p your_question

无法访问地址 0x0 处的内存

4

2 回答 2

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(...);
于 2013-07-30T16:08:20.140 回答
0

我不是 C++ 专业的,但是在你调用成员函数之前set_question,你初始化了这个类question吗?似乎question该类未初始化。

于 2013-07-29T03:26:27.133 回答