Я считаю, что проблема в функции readData
. Когда вы используете scanf
, вы должны использовать оператор адреса &
для чтения переменных.
Следующий код:
void readData(bst_t *node) {
while (scanf("%[^,],%[^,],%[^,],%[^,],%[^,],%[^,],%[^,],%[^,],%[^,],"
"%[^,],%[^,],%[^,],%[^,],%[^,]",
node->data.ID, node->data.name, node->data.sex,
node->data.height, node->data.weight, node->data.team,
node->data.NOC, node->data.games, node->data.year,
node->data.season, node->data.city, node->data.sport,
node->data.event, node->data.medal) == 14) {
continue;
}
следует изменить на:
void readData(bst_t *node) {
while (scanf("%[^,],%[^,],%[^,],%[^,],%[^,],%[^,],%[^,],%[^,],%[^,],"
"%[^,],%[^,],%[^,],%[^,],%[^,]",
&node->data.ID, &node->data.name, &node->data.sex,
&node->data.height, &node->data.weight, &node->data.team,
&node->data.NOC, &node->data.games, &node->data.year,
&node->data.season, &node->data.city, &node->data.sport,
&node->data.event, &node->data.medal) == 14) {
continue;
}
Также необходимо внести некоторые изменения:
1. Передайте аргументы и верните значения, используя указатели на структуры, а не на структуры.
2. Выделите память в куче, а не в стеке при работе со связанными списками (даже для корневого узла).
3. При распределении памяти в куче убедитесь, что выделенный размер соответствует размеру структуры, а не размеру указателя на структуру.
4. Убедитесь, что вы освобождаете всю память, выделенную в куче, и не ошибочно освобождайте память, выделенную в стеке, как вы, кажется, делаете здесь.