2016-12-25 3 views
1

Im работает над двоичным деревом поиска в C atm, работает все отлично, узлы вставлены, найдены, напечатаны и т. Д. НО, значения, которые у них есть, неверны. Каждый узел в моем дереве имеет номер телефона (телефон) и имя (имя). Номера телефонов не являются проблемой, но имена. Например, если у меня есть мой корень с номером 1, и имя должно быть «Майк», оно говорит number = 1 и name = 1Как добавить имя в узел? (Binary Tree, C)

То же самое для каждого другого узла. Number = Имя. Зачем? Я предполагаю, что это имеет какое-то отношение к значению, являющемуся строкой, а не int, не так ли? Важная часть моего кода будет следующей:

void bst_insert_node(bstree* bst, unsigned long phone, char *name) { 

bst_node* tmp=bst->root; 
bst_node* tmp2; 
bst_node* new_node=(bst_node*)malloc(sizeof(bst_node)); 

new_node->phone=phone; 
new_node->name=name; // THIS LINE 
new_node->left=new_node->right=NULL; 

Что мне нужно изменить? Я попробовал несколько вещей сейчас, но ничего не сработало.

+1

Добро пожаловать в переполнение стека! [Пожалуйста, ознакомьтесь с этим обсуждением, почему бы не использовать возвращаемое значение 'malloc()' и family в 'C'.] (Http://stackoverflow.com/q/605845/2173917). –

+0

Добро пожаловать в переполнение стека! Вы хотите создать [___MCVE___] (http://stackoverflow.com/help/mcve)? –

+0

Thx для связи! Не знал этого. А моего опубликованного кода недостаточно? Что я могу сделать лучше? Я на самом деле думал, что это правильный путь. – ykykyk

ответ

1

Как вы сказали, проблема в том, что имя представляет собой строковый тип, который на самом деле является char*. Поэтому вы назначаете только указатель на строку. Вы должны скопировать строку. Что-то вроде этого:

new_node->name = malloc((strlen(name)+1) * sizeof(char)); // allocate 
strcpy(new_node->name, name); // copy the content 

Помните +1 в инструкции malloc. Вы должны выделить один дополнительный символ для символа завершения строки ('\ 0').

+0

Спасибо большое! Имеет смысл, работает сейчас! – ykykyk