制作指针全局C++
问题描述:
我使用根指针构建了一棵二叉树。制作指针全局C++
是不是根指针应该在所有函数中被改变,因为我声明了全局函数?我如何实现这一目标?
感谢
//伪代码(左,右指针其他地方声明)
Node * root = new Node;
Node * BST::BuildTree(int label)
{
root->left = changed;
root->right = changed;
}
Node * BST::GetNode(int label)
{
BTNode *ptr = root;
cout << root->right; //This gives me a seg fault since root is still NULL and not changed
}
答
这是因为你还没有指定一个有效的地址到root
,在你的代码。
应该指向一个有效的节点:
void BST::CreateRoot()
{
root = new (std::nothrow) Node;
}
而在C++中,你应该使用unnamed namespace当你想使用一个“全局变量”。好处是它可以防止可以通过全局变量轻松引入的名称冲突。
namespace
{
Node * root = NULL;
}
如果你使用C编码,我会在这里结束。但是,既然你使用C++,还有一件事。
你应该尽力去avoid using global variables,尤其是当你有很多依赖对方的东西时。通常,你可以创建一个单例类。
但我不认为你的情况是复杂的使用单身。只需在你的函数中添加一个额外的输入参数,以指示你想要操作哪个节点。
// @param1(node) can be root or whatever node you want
Node * BST::BuildTree(Node *node, int label)
{
node->left = changed;
node->right = changed;
}
我没有看到你在哪里指定'root'的位置。事实上,就我所知,'BuildTree'也应该打破,正是由于这个原因 - 'root'永远不会指向'Node'。 – cHao 2012-04-23 02:26:59
我想我修复了它 – 2012-04-23 02:30:29
你几乎不需要使用全局变量,尤其是在C++中,你有函数的引用变量,以便你可以随意更改。 – paxdiablo 2012-04-23 02:40:12