【问题标题】:Segfault trying to strcpy a char *Segfault 试图 strcpy 一个字符 *
【发布时间】:2013-07-28 16:12:50
【问题描述】:

我正在上 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??") 在 question.cpp:51

51 your_question = new char [strlen(question)+1];

(gdb) p strlen(问题)

$1 = 27

(gdb) p your_question

无法访问地址 0x0 的内存

【问题讨论】:

    标签: gdb segmentation-fault strlen strcpy


    【解决方案1】:

    我不是C++专业的,但是在你调用成员函数set_question之前,你有没有初始化类questionquestion 类似乎没有初始化。

    【讨论】:

      【解决方案2】:

      您正在对未初始化的对象调用 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(...);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-08-12
        • 2020-07-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-07-04
        • 1970-01-01
        相关资源
        最近更新 更多