Как изменить ссылку указателя на переменную члена структуры - PullRequest
0 голосов
/ 03 мая 2020

Я хочу создать BST на C ++. Когда я пытаюсь назначить указатель на новый узел - он не меняется. После вызова функции он все еще имеет случайное значение. Можно ли сделать это по-моему?

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);
      }
   }

};

1 Ответ

1 голос
/ 03 мая 2020
wezel pt = wezel(aValue);
wezel *point = &pt;
aNode.l_val = point;

Здесь вы создаете объект pt типа wezel, который будет уничтожен, как только выйдет из области видимости, в то время как указатели 'point' и aNode.l_val по-прежнему будут указывать на его адрес. (Кстати, «точка» также будет уничтожена при выходе из области действия.)

Вместо этого вы должны создать новый объект, связанный с aNode.l_val следующим образом:

aNode.l_val = new wezel(aValue);

И не забудьте правильно утилизировать ваши узлы с помощью соответствующих операторов «delete».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...