Я делаю простую программу базы данных, чтобы узнать о структурах и двоичных деревьях. Я создал глобальную структуру Student
с 3 полями: имя, фамилия, возраст и написал функцию для приема 3 пользовательских входных данных (например, в виде строк in_fname
, in_sname
и int in_age
) и поместите их во временную структуру new
, планируя скопировать их в соответствующее местоположение основного дерева. После ввода пользовательских данных для первой записи у меня есть:
struct Student *new;
new = (Student *) malloc (sizeof(struct Student));
strcpy (new->fname, in_fname);
strcpy (new->sname, in_sname);
new->age = in_age;
new->left = new->right = NULL;
printf("Contents of new is '%s', '%s', '%d'.\n",new->fname, new->sname, new->age);
student_tree = new /* wanting to copy the new student as the first entry in the tree*/
Теперь, когда я
print("Contents of structure is '%s', '%s', '%d'.\n",student_tree->fname, student_tree->sname, student_tree->age);
Я получаю правильные записи, указывая, что копия сработала, но когда я
free(new)
print("Contents of structure is '%s', '%s', '%d'.\n",student_tree->fname, student_tree->sname, student_tree->age);
(думая, что это было временно, и оно мне больше не нужно), когда первая запись fname
всегда повреждена и содержит мусор.
Может кто-нибудь объяснить, что мне не хватает? Не обязательно хотеть фиксированный код, просто чтобы понять, почему меняется содержимое структуры в дереве, когда исчезла вещь, из которой я его скопировал, и как я могу ее постоянно копировать.
Большое спасибо,
* * Ш тысячу двадцать-один