c++ - 二叉树构造函数中的 EXC_BAD_ACCESS

标签 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 更改为直接获取字符串而不是变量

(即

tree guessTree("rabbit");

) 我在行中收到错误

    root->yes = NULL;

我希望这是我忽略的简单事情,因为它通常就是这样。

最佳答案

node *root;

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

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

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

关于c++ - 二叉树构造函数中的 EXC_BAD_ACCESS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38676549/

相关文章:

c++ - 如何在 C++ 中将 std::array 作为具有不同数量元素的模板参数传递?

python - Python 中的二叉树

python - Python 中的二叉树

c++ - 此代码有什么问题?它永无止境(二叉树的顶 View )

c++ - 分离 C++ 模板函数的声明和定义的正确格式

c++ - 如何强制初始化静态成员?

go - 如何在Workiva/go-data structures/中使用b tree/plus

algorithm - 如何使用层序遍历序列构造二叉树

c++ - 在模板实例化之间共享静态成员? (不可能的?)

c++ - 我可以只在单元测试中使用 BOOST_CHECK 吗?