制作指针全局C++

制作指针全局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 
} 
+0

我没有看到你在哪里指定'root'的位置。事实上,就我所知,'BuildTree'也应该打破,正是由于这个原因 - 'root'永远不会指向'Node'。 – cHao 2012-04-23 02:26:59

+0

我想我修复了它 – 2012-04-23 02:30:29

+0

你几乎不需要使用全局变量,尤其是在C++中,你有函数的引用变量,以便你可以随意更改。 – paxdiablo 2012-04-23 02:40:12

这是因为你还没有指定一个有效的地址到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; 
}