gpt4 book ai didi

c++ - 指针困惑

转载 作者:行者123 更新时间:2023-11-28 07:04:48 24 4
gpt4 key购买 nike

我对指针在这里的工作方式感到困惑。我在此类中有一个名为 PrefixTree 的类和一个名为 TreeNode 的结构。我有以下代码用字符串构建树,问题是每次调用 preorder() 时它都不会正确返回根字符,然后会抛出段错误。

我想知道我是否正确设置了 root 指针,或者我是否在其他文件中滥用了它。

//prefixtree.cpp
PrefixTree::TreeNode* PrefixTree::buildTree(string& input)
{
char c = input[0];
input.erase(0,1);

TreeNode* node = new TreeNode();
node->character = c;

if (!root)
root = node;

if (c == '*')
{
node->left = buildTree(input);
node->right = buildTree(input);
}

return node;
}

void PrefixTree::preorder()
{
traverse(root);
}

void PrefixTree::traverse(TreeNode* node)
{
if (node)
{
cout << node->character << endl;
traverse(node->left);
traverse(node->right);
}
}

//prefixtree.h

class PrefixTree
{
private:
struct TreeNode
{
char character;
TreeNode* left;
TreeNode* right;
};

TreeNode* root;

void traverse(TreeNode* node);

public:
TreeNode* buildTree(string& input);
void preorder();
};

//main.cpp
PrefixTree tree;
string a = string("*a**!*dc*rb");
cout << tree.buildTree(a)->character << endl;

tree.preorder();

最佳答案

您需要初始化指针成员,它们不会自动初始化并且可能包含垃圾值而不是 nullptr,这会导致您的测试 if(!root)if(node) 无用,将未初始化的指针报告为有效,然后您将取消引用。

添加构造函数:

class PrefixTree
{
private:
struct TreeNode
{
char character;
TreeNode* left;
TreeNode* right;

TreeNode() : character('a'), left(nullptr), right(nullptr) {};
};

TreeNode* root;

void traverse(TreeNode* node);

public:
PrefixTree() : root(nullptr) {};

TreeNode* buildTree(string& input);
void preorder();
};

关于c++ - 指针困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21923106/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com