二叉树构造函数中的EXC_BAD_ACCESS

时间:2016-07-30 17:18:14

标签: c++ binary-tree

我正在编写一个程序,用于演示二叉树如何工作,它有点像20个问题,但最后会增加新问题等。

我已经完成了大部分工作,代码会编译,但是当我尝试执行它时,它会给我错误“EXC_BAD_ACCESS”(在Xcode中)。

这是我的main.cpp摘录树的初始化:

std::string firstSubjectGuess = "rabbit";
tree guessTree(firstSubjectGuess);

我的头文件的顶部创建节点结构并声明构造函数/解构函数:

struct node
{
    std::string question;
    std::string subject;
    node *yes = NULL;
    node *no = NULL;
};

class tree
{
public:
    //tree();
    tree(std::string subject);
    ~tree();

然后是树类的构造函数:

tree::tree(std::string subject){
    node* root;
    root->yes = NULL;
    root->no = NULL;
    root->question = "Are you thinking of " + getAOrAn(subject[0]) + " " + subject + "?";
    root->subject = subject;
    this->root = root;
    cursor = root;
}

在当前状态下,我在第

行收到错误
root->subject = subject;

在类文件中。但是,如果我更改main.cpp以直接获取字符串而不是变量

(I.E。

tree guessTree("rabbit");

)我在第

行收到错误
    root->yes = NULL;

我希望这是一个简单的东西,我只是忽略了,因为它通常是这样。

1 个答案:

答案 0 :(得分:2)

node *root;

您声明了此指针,但忘记用new实际初始化它。

每个自尊的C ++编译器都会大声警告您使用未初始化的变量。如果您收到编译器的警告,在尝试编译时,请将其作为学习经验:永远不要忽略编译器的警告。编译代码时应该得到的唯一输出是:什么都没有。只有生成的目标文件。

您的编译器显然无法捕获代码中的每个逻辑错误,但它可以捕获一些明显的错误。如果您没有收到编译器的警告,请阅读其文档并找出哪些编译器选项会打开警告消息。