Когда вы делаете это:
newV->name=name;
newV->researchLab=researchLab;
Вы копируете указатель в строки name
и researchLab
. Вы не копируете сами строки . Другими словами, после этого newV->name
и name
указывают на одно и то же место в памяти, где хранится имя; Вы не создали дубликат копии данных.
Поскольку затем вы перезаписываете массив name
в функции createNewPerson
, в конце этой функции все ваши структуры vertex
будут иметь свой атрибут name
, указывающий на ту же область памяти, которая хранит только введенную фамилию.
Хуже того, когда возвращается createNewPerson
, его локальный массив name
выходит из области видимости и повторно используется для других целей. Поскольку ваши вершинные структуры все еще указывают здесь на свои атрибуты name
, именно так вы и получаете мусор.
Вам нужно продублировать строку. Простой способ сделать это:
newV->name = strdup(name);
Вам потребуется #include <string.h>
, чтобы получить библиотечную функцию strdup
.
И затем вам также нужно убедиться, что вы вызываете free
для атрибута name
всякий раз, когда вы используете структуру vertex
.