Я пишу программу для выполнения алгоритма «первым пришел - первым сервисом», он показывает ошибку сегментации - PullRequest
0 голосов
/ 25 января 2020
#include<stdio.h>
#include<stdlib.h>
struct pro{
int at;
int cpu;
struct pro *next;
};
struct pro *head=NULL;

int main()
{
 int n,i,t,c;
 struct pro *temp;
 struct pro *newnode;
 printf("/nenter no. of processes=");
 scanf("%d",&n);
 for (i=0;i<=n;i++)
 {
   newnode=((struct pro *)malloc(sizeof(struct pro)));
   printf("/n enter arrival time=");
   scanf("%d",&t);
   newnode->at=t;
   printf("/n enter cpu burst time=");
   scanf("%d",&c);
   newnode->cpu=c;
   newnode->next=NULL;
   if (head==NULL)
   {`
     head=newnode;
   }
   else
    {temp=head;:
     while(temp!=NULL)
     {
       temp=temp->next;
      }
     newnode=temp->next;
    }
 }
  temp=head;
   while(temp!=NULL)
   {
     printf("\narrival time =%d",temp->at);
     printf("\ncpu birst time=%d",temp->cpu);
   }
 return 0;
}

~    

Я пишу программу для ввода и отображения подробностей алгоритма «первым пришел - первым обслужен», но кажется, что программа застревает здесь только до того, как я перехожу к расчетной части. я здесь не так делаю?

~
~

1 Ответ

1 голос
/ 25 января 2020

Ниже фрагмент, который является частью вашего кода, проходит до конца связанного списка и пытается получить доступ к temp, который является NULL, и пытается (NULL)->next

   while(temp!=NULL)
    {
       temp=temp->next;
     }
     newnode=temp->next;

, что вам нужно чтобы сделать, это найти последний узел для добавления нового узла. Что-то вроде этого,

   while(temp->next!=NULL)
    {
       temp=temp->next;
     }
     temp->next=newnode; //newly created node is appended at the end of the list.

И Print - это бесконечный l oop, поскольку temp не изменяется в l oop, который должен быть ,

while(temp!=NULL)
   {
     //
     temp = temp->next;
   }
...