xstring中的空指针无效

时间:2011-05-17 10:10:30

标签: c++ nullpointerexception

所以我差不多完成了这项任务,但现在我又遇到了困难。当我尝试从问题类中绘制文本时,我从xstring获取无效的空指针。我有大约2个小时,所以任何帮助都会非常感激

这是问题类:

class Question {

public:
    int col;
    int row;
    bool dailyDouble;
    char* question;
    char* answer;
    double value;
    Question();
    Question(int, int, bool, char*, char*);
    bool checkAnswer(string);
    Question& operator=(const Question&);
};



Question::Question() {}

Question::Question(int c, int r, bool d, char* q, char* a)
{
    col = c; row = r; dailyDouble = d; question = q, answer = a;
    if(d)
        value = r * 200 * 2;
    else
        value = r * 200;
}

bool Question::checkAnswer(string answer)
{
    if(answer.find("What is") && answer.find(answer))
        return true;
    return false;
}

Question& Question::operator=(const Question&)
{
    return *this;
}

我有一个绘图文本方法(有效)但我的空间不足,所以这就是导致错误的行:

 drawText((WinWidth/2)-200,(WinHeight/2) - 100, curQuestion.question);

真的很感激任何帮助!

1 个答案:

答案 0 :(得分:1)

你的operator =(const Question&)是错误的,它只会返回当前对象。如果该对象是使用默认构造函数创建的,则“问题”和“答案”未初始化,如果使用此运算符,您的程序可能会崩溃。

运算符“=”应该复制每个字段。对于像“question”和“answer”这样的字符串指针,您需要为字符串内容分配新内存,并从作为参数传递的对象的字符串中复制字符。但你可能应该摆脱operator =无论如何,并使用std :: string代替“问题”和“回答”而不是char *(见下文)。

最后,

if(answer.find("What is") && answer.find(answer))

没有意义。它可能应该是这样的:

bool Question::checkAnswer(string proposedAnswer)
{
    if(question.find("What is") && answer.find(proposedAnswer))
        return true;
    return false;
}

...假设您将问题类型从char *更改为字符串:

public:
    int col;
    int row;
    bool dailyDouble;
    string question;
    string answer;
    ...