Запись в связный список из файла - C (СИ)
Формулировка задачи:
Описание списков:
Функция чтения файла:
Функция вызова:
При выборе данной функци программы возникает следующая ошибка:
Некоторые люди пишут, что такая ошибка происходит часто ввиду разыменовывания недоступного указателя, но, видимо к этой проблеме моя проблема отношения не имеет.
Мне кажется, что слабое место находится здесь:
При запуске printf в цикле, при count_names = 4 count доходит до 2, после чего возникает ошибка. Список, который я перед этим передал в файл, содержит три узла.
typedef struct name
{
char first_name[MAX_NAME];
char last_name[MAX_NAME];
int score;
struct name *next;
struct name *prev;
} Name;
typedef struct DblLinkedList {
size_t size;
Name *head;
Name *tail;
} DblLinkedList;Name * load_from_file(Name * node, DblLinkedList *list, const size_t *count_names, char * filename)
{
FILE *fp = NULL;
node = list->head;
size_t count;
if ((fp = fopen(filename, "rb")) == NULL)
{
printf("\nCan't open the file\n");
exit(EXIT_FAILURE);
}
for (count = 0; count < *count_names; ++count)
{
fread(node, sizeof(Name), 1, fp);
node = node->next;
}
if(fclose(fp) != 0)
{
printf("\nCan't close the file in a correct way\n");
exit(EXIT_FAILURE);
}
return node;
}
}case '2':
{
names = load_from_file(names, linked_names, &count_names, filename);
Printstruct(linked_names, linked_names->size);
main_menu();
break;
}
” terminated by signal SIGSEGV (Address boundary error)
for (count = 0; count < *count_names; ++count)
{
fread(node, sizeof(Name), 1, fp);
node = node->next;
}Решение задачи: «Запись в связный список из файла»
textual
Листинг программы
node = node->next;