如何修改对结构成员变量的指针引用?

问题描述 投票:0回答:1

我想用C++创建BST。当我尝试将指针分配给新节点时,它没有改变。在函数调用后,它仍然是随机值。是否可以用我的方法来做?

struct wezel {
  int value;
  wezel *l_val;
  wezel *r_val;

  wezel(int aValue) {
    value = aValue;
    l_val = NULL;
    r_val = NULL;
  }
};

struct tree {
   wezel *root;

   tree(wezel *aNode) {
     root = aNode;
   }
};

void addNode(int aValue, wezel aNode) {
   if(aValue < aNode.value) {
      if(aNode.l_val == NULL) {
            wezel pt = wezel(aValue);
            wezel *point = &pt;
        aNode.l_val = point; //do not work
      } else {
        return addNode(aValue, *aNode.l_val);
      }
   } else if(aValue > aNode.value) {
      if(aNode.r_val == NULL) {
            wezel pt = wezel(aValue);
            wezel *point = &pt;
        aNode.r_val = point; //do not work
      } else {
        return addNode(aValue, *aNode.r_val);
      }
   }

};

c++ pointers struct
1个回答
1
投票
wezel pt = wezel(aValue);
wezel *point = &pt;
aNode.l_val = point;

这里你创建了一个wezel类型的pt对象,一旦它离开作用域就会被销毁,而指针'point'和aNode.l_val仍然指向它的地址。顺便说一下'point'也会在离开作用域后被销毁)。

相反,你应该创建一个新的对象,像这样链接到 aNode.l_val。

aNode.l_val = new wezel(aValue);

不要忘了用各自的 "delete "语句正确处理你的节点。

© www.soinside.com 2019 - 2024. All rights reserved.