使指针全局C++
Making a pointer global 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++中,当您想使用"全局变量"时,您应该使用未命名的命名空间。好处是它可以防止全局变量很容易引入的名称冲突。
namespace
{
Node * root = NULL;
}
如果你用C编码,我会在这里结束。但是,既然您正在使用C++,那么还有一件事。
您应该尽量避免使用全局变量,尤其是当您有很多相互依赖的全局变量时。通常,您可以创建单一实例类。
但我不认为你的情况使用单例那么复杂。只需向函数添加一个额外的输入参数,以指示要在哪个节点上运行。
// @param1(node) can be root or whatever node you want
Node * BST::BuildTree(Node *node, int label)
{
node->left = changed;
node->right = changed;
}
相关文章:
- 为什么在全局范围内使用"extern int a"似乎不行?
- 在全局变量中保存类的实例以重新创建类(创建"backup")
- 当vector是tje全局变量时,c++中vector的内存管理
- std::threads可以从Windows DLL中的全局变量创建/销毁吗?
- 如何创建一个空的全局类并在启动时实例化它
- 内联函数中具有内部链接的全局变量
- 为什么虚函数不能是静态的和全局的?
- 如何在信号处理程序和普通函数中对全局变量进行互斥读写操作
- 全局作用域中函数指针的赋值
- g++用户定义的动态链接库上的全局new和delete运算符
- 在命名空间中使用全局命名空间中的函数
- 全局变量 多读取器 一个写入器多线程安全?
- 类的全局对象和静态成员
- 如何声明一个可以在整个程序中使用的全局 2d 3d 4d .. 数组(堆版本)变量?
- 如果全局变量默认是外部变量,为什么要添加"extern"关键字?
- 不同作用域中的静态变量和全局变量
- 如何使用 llvm-10 库在C++定义 LLVM 全局值变量?
- 使用全局声明的向量时,C++双重释放错误/损坏
- 将线程中的数据存储到全局容器的最佳方法?
- 如何重写全局方法名称以在调用原始方法之前将我的代码推到前面