所以我尝试使用一些我必须使用的给定函数将 BST 转换为 DLL。在这样做的同时,我不断遇到段错误。当我尝试调试它时,我终于来到了这里。我在下面写了一个非常简单的测试脚本。
我对指针的了解是它是通过引用传递的,就像我正在更改传递的指针指向的值/对象一样,它反射(reflect)在我的原始调用函数中。
为什么当我创建一个新节点然后传递指针(myf)时,它工作,但是当我只是传递指针并在函数内部创建新节点时,它显示段错误(myf2)?
如果这是因为新节点超出范围,请再次检查函数“myf”。我创建了一个由我的原始节点指向的新节点。并且this的值在函数调用结束后保留。这不也超出了范围吗?
我对它出现的指针有一些基本的基本问题,这真的很有帮助。谢谢
#include<iostream>
using namespace std;
class Node
{
public:
int val;
Node *left;
};
void myf(Node *a)
{
a->left = new Node();
a->left->val = 20;
a->val = 15;
}
void myf2(Node *a)
{
a = new Node();
a->val = 35;
}
int main()
{
Node *a = NULL, *b = NULL;
a = new Node();
a->val = 5;
myf(a);
cout << "New value of a = " << a->val << endl;
cout << "left value of a = " << a->left->val << endl;
myf2(b);
cout << "New value of b = " << b->val << endl;
}
最佳答案
您的问题是,您的指针未设置为 b,为此,您需要将 myf2
编辑为如下内容:
void myf2(Node **a)
{
*a = new Node();
(*a)->val=35;
}
然后像这样调用myf2
:
myf2(&b);
我相信这应该可以解决您的问题。
不要将 Node *b
仅视为一个指针,也可以将其视为一个整数,因为指针分解为一个整数,指向内存中的一个空间。
因此,您将指针(整数)的指针传递给函数。
另一个例子是:
void myfunction(int *i) {
*i = 5;
}
int main(int argc, char** argv) {
int x;
myfunction(&x);
cout << x << endl;
return 0;
}
但这是使用实际整数。
关于创建节点时指针的 C++ 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22124909/