【发布时间】:2014-03-02 07:11:10
【问题描述】:
所以我试图使用一些我必须使用的给定函数将 BST 转换为 DLL。在这样做的同时,我不断遇到分段错误。当我尝试调试它时,我终于想到了这一点。我在下面写了一个非常简单的测试脚本。
我对指针的了解是它是通过引用传递的,就像我正在更改传递的指针指向的值/对象一样,它会反映在我原来的调用函数中。
为什么当我创建一个新节点然后传递指针(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;
}
【问题讨论】:
-
right指针在哪里? -
忽略我在 Node() 之后给出的括号。初始化时不需要。
-
嗨 Rikayan。这是一个测试代码。这个程序没有任何逻辑或动机。我正处于一个更复杂的代码中间,所以我编写了这个测试代码来找出问题所在。请专注于这里的一切。谢谢。