Ошибка сегментации при создании списка - C (СИ)

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

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

Здрасти))) Вот такая небольшая проблема со списком)))) список читаем из файла и сортируем его)) список из целых чисел)) и прост на экран вывести)) у нас пока 1 лекция ток была по си.. и самому интересно стало и сам начал разбираться вот дошел до списков и застрял((...
Листинг программы
  1. struct Node
  2. {
  3. int ch;
  4. Node *next;
  5. };
  6. typedef Node *pNode;
  7. main(){
  8. clrscr();
  9. int i;
  10. pNode First = NULL, Curr = NULL, Last = NULL;
  11. FILE *f;
  12. f=fopen("file.txt", "r");
  13. if ((f=fopen("file.txt", "r"))==NULL)
  14. {
  15. printf("\n Fayla net!!!");
  16. getch();
  17. return 1;
  18. }
  19. .................
  20. ................
  21. First = new Node;
  22. Curr = First;
  23. for (i=0; i<count; i++)
  24. if (fscanf(f, "%d", Last->ch)==0)
  25. {
  26. Last->next = new Node;
  27. Last = Last->next;
  28. }
  29.  
  30. Curr = First;
  31. do
  32. {
  33. printf(" %3d",Curr->ch);
  34. Curr = Curr->next;
  35. }
  36. while (Curr == NULL);
  37. fclose(f);
  38. ............
вот он чет не создает этот список(( ошибка сегментации(( еще если можно не смогли б подсказать как узнать сколько чисел в файле записанно))

Решение задачи: «Ошибка сегментации при создании списка»

textual
Листинг программы
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. typedef struct Item* pItem;
  5. struct Item
  6. {
  7.     int value;
  8.     pItem next;
  9. };
  10.  
  11. pItem new_item(int value)
  12. {
  13.     pItem newp = (pItem)malloc( sizeof(struct Item) );
  14.     newp->value = value;
  15.     newp->next = NULL;
  16.  
  17.     return newp;
  18. }
  19.  
  20. //-------------
  21.  
  22. pItem push_back(pItem listp, pItem newp)
  23. {
  24.     pItem p;
  25.     if(listp == NULL) return newp;
  26.     for(p = listp; p->next != NULL; p = p->next);
  27.     p->next = newp;
  28.  
  29.     return listp;
  30. }
  31.  
  32. //-------------
  33.  
  34. void print_list(pItem listp)
  35. {
  36.     while(listp)
  37.     {
  38.         printf("%d ", listp->value);
  39.         listp = listp->next;
  40.     }
  41.     putchar('\n');
  42. }
  43.  
  44. //-------------
  45.  
  46. void sort(pItem listp)
  47. {
  48.     int i;
  49.     pItem p1, p2;
  50.  
  51.     for(p1 = listp; p1; p1 = p1->next)
  52.     {
  53.         for(p2 = listp; p2; p2 = p2->next)
  54.         {
  55.             if(p1->value < p2->value)
  56.             {
  57.                 i = p1->value;
  58.                 p1->value = p2->value;
  59.                 p2->value = i;
  60.             }
  61.         }
  62.     }
  63. }
  64.  
  65. void clean_up(pItem listp)
  66. {
  67.     pItem p;
  68.     while(listp)
  69.     {
  70.         p = listp->next;
  71.         free(listp);
  72.         listp = p;
  73.     }
  74. }
  75.  
  76. //-------------
  77. int main()
  78. {
  79.     int i;
  80.     pItem listp = NULL;
  81.  
  82.     for(i = 10; i >= 1; --i) listp = push_back(listp, new_item(i));
  83.  
  84.     puts("Before:");
  85.     print_list(listp);
  86.  
  87.     puts("After:");
  88.     sort(listp);
  89.     print_list(listp);
  90.  
  91.     clean_up(listp);
  92.  
  93.     return 0;
  94. }

Объяснение кода листинга программы

Код представляет собой реализацию односвязного списка в языке C. Список начинается с NULL, то есть пуст. Функция new_item() создает новый элемент списка с заданным значением и добавляет его в конец списка (функция push_back()). Функция print_list() проходит по всем элементам списка и выводит их значения. Функция sort() сортирует элементы списка по возрастанию. Функция clean_up() освобождает память, выделенную под каждый элемент списка, начиная с последнего и двигаясь к первому. В функции main() создается список из 10 элементов, затем он сортируется и выводится на экран. После этого список очищается.

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


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

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

10   голосов , оценка 3.7 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут