在draw()
之后,n为何仍指向默认节点?
我正在尝试传递指向draw()
的节点的指针,并使其指向draw()
内新创建的节点。
#include <iostream>
using namespace std;
struct node{
int key;
struct node *l, *r;
int level, place;
};
int keyCounter = 0;
void draw(struct node *t, int low, int high, int storey){
if(storey == 0) return;
t = new node();
t->key = ++keyCounter;
t->level = storey;
int mid = (low + high) / 2;
t->place = mid;
draw(t->l, low, mid, storey - 1);
draw(t->r, mid, high, storey - 1);
}
void visit(struct node *t){
if(t != NULL){
cout << t->key << ' ' << t->level << ' ' << t->place << '\n';
visit(t->l);
visit(t->r);
}
}
int main(){
struct node *n = new node();
draw(n, 0, 64, 6);
visit(n);
return 0;
}
答案 0 :(得分:0)
在方法draw中,您将t
设置为指向另一个node
。
t = new node();
现在t
指向另一个存储空间。这不是n
指向的空间。更改t
属性时,您不会更改node
指向的n
。删除我在上面指定的行。
答案 1 :(得分:0)
如果您真的想更改n指向的内容,请使用对指针的引用
void draw(struct node& *t, int low, int high, int storey){
此外,不要忘记释放您传递的指针。但是,建议您再次认真考虑您的设计。
答案 2 :(得分:0)
您的代码对于谁分配posted_reddit_ids = "/full_path_of_file/oldies.txt"
感到困惑。您需要执行两次-在n
中一次,在main()
中一次。这显然是不明智的。
一个显而易见的问题是:为什么不将draw()
传递给n
,因为它什么都不做?相反,请尝试以下操作:
draw()
然后:
struct node *draw (int low, int high, int storey)
{
if(storey == 0) return nullptr;
t = new node();
....
return t;
}
当然,现在是2018年,您完全不应该使用原始指针,而应该使用that's another story。而且拥有名为int main()
{
struct node *n = draw(0, 64, 6);
if (n)
visit(n);
return 0;
}
的函数来分配对象也有点不可思议。也许应该将其称为draw
。