Запись в связный список из файла - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Описание списков:
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;
    }
При запуске printf в цикле, при count_names = 4 count доходит до 2, после чего возникает ошибка. Список, который я перед этим передал в файл, содержит три узла.

Решение задачи: «Запись в связный список из файла»

textual
Листинг программы
node = node->next;

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 4.167 из 5
Похожие ответы