Я борюсь со следующим кодом, написанным на языке С. Это приводит к ошибке сегментации при выполнении. ошибка приходит при исполнении линииОтсутствует ошибка при отладке кода C, но при выполнении команды возникает ошибка СЕГМЕНТАЦИИ. Зачем?
scanf("%d %d %d %d",&(plist[i]->arrival),&(plist[i]->burst),&(plist[i]->deadline),&(plist[i]->period));
Ниже весь код, который не дает никакой ошибки компиляции, но, бегите ошибку времени. Было бы здорово, если бы кто-нибудь здесь мог сказать мне, где я ошибаюсь.
#include <stdio.h>
#include <stdlib.h>
#define INT_MAX 9999999
struct task
{
int arrival,burst,period,deadline,remaining,flag;
};
void main()
{
int i,n,time,flags=0,smallest;
struct task *list,**plist;
printf("\nEnter number of tasks :: ");
scanf("%d",&n);
list= (struct task *)malloc(sizeof(struct task)*n+1);
plist=(struct task **)malloc(sizeof(struct task*)*n+1);
for (i=0;i<=n;++i)
{
plist[i]=&list[i];
}
plist[n]->deadline=plist[n]->remaining=plist[n]->arrival=INT_MAX;
for (i=0;i<n;++i)
{
printf("\nEnter Arrival time, Burst time, Deadline & Period of task T%d ::",i);
scanf("%d %d %d %d",&(plist[i]->arrival),&(plist[i]->burst),&(plist[i]->deadline),&(plist[i]->period));
plist[i]->flag=0;
plist[i]->remaining=plist[i]->burst;
}
for(time=0;;time++)
{
smallest=n;
for(i=0;i<n+1;++i)
{
if(plist[i]->arrival<=time &&
plist[i]->deadline<plist[smallest]->deadline &&
plist[i]->remaining>0)
{
smallest=i;
}
}
plist[smallest]->remaining--;
if(plist[smallest]->remaining==0)
{
if((plist[smallest]->flag==0))
{
plist[smallest]->arrival=0;
}
plist[smallest]->flag=1;
plist[smallest]->arrival+=plist[smallest]->period;
plist[smallest]->remaining=plist[smallest]->burst;
printf("\nTask T%d completed at time %d.",smallest,time+1);
int j;
flags=0;
for(j=0;j<n;++j)
{
flags+=plist[j]->flag;
}
}if(flags==n)break;
}
free(plist);
free(list);
system("pause");
}
Это была глупая ошибка, но ее трудно распознать. Огромное спасибо. –