我有一个家庭作业要写“先到先得”和“循环模拟”并比较它们。我开始创建一个链表来制作事件列表。我制作了插入和打印列表函数,但无法使其工作。我的朋友告诉我使用双链表,所以我重新创建了链表,并试图使插入函数工作。我修复了大部分问题,但现在找不到插入函数的错误。当我比较是否插入指针数据和当前指针数据时,While循环语句出现分段错误。我已经阅读了我的C语言书,书中的代码与我的代码相似,并且还通过了双链表分段错误-C问题,但仍然无法得到我的错误。
这是我的输出
-bash-3.2$ ./main 3 100
please enter the process-id, arrival-time and cpu-time.
1 2 3 4
something
something
DONE1
DONE2
DONE3
DONE4
Segmentation fault
由于test4(DONE4)已打印,而下一个测试未打印,这意味着我在这部分中有一个错误
while((currentptr->arrivaltime < newpointer->arrivaltime) && currentptr != NULL)
你能帮帮我吗?我的代码有什么问题?
struct event {
struct event *next;
int processid;
int arrivaltime;
int cputime;
};
typedef struct event Event;
typedef Event *eventPtr;
Event create_node(int processid, int arrivaltime, int cputime);
void add_event(Event *newpointer, eventPtr *eventlist);
void print_node(Event node);
void print_eventlist(Event *eventlist);
Event get_nextevent(Event *eventlist);
int main(int argc, char* argv[])
{
int sourcenum,a,b,c,i;
Event tempevent;
eventPtr eventlist = NULL;
print_eventlist(&(*eventlist));
char* sources,timeSlice;
if(argc != 3)
printf("Proper usage is: main.c sources time-slice\n");
else
{
sourcenum = atoi(argv[1]);
timeSlice = atoi(argv[2]);
for(i = 0; i < sourcenum ; i++)
{
//print_eventlist(&(*eventlist));
printf("please enter the process-id, arrival-time and cpu-time.\n");
scanf("%d %d %d",&a, &b, &c);
printf("something\n");
tempevent = create_node(a,b,c);
print
printf("something\n");
add_event(&tempevent, &eventlist);
}
}
return 0;
}
void add_event(Event *newpointer, eventPtr *eventlist) //insert
{
printf("DONE1\n");
eventPtr currentptr, prevptr;
printf("DONE2\n");
prevptr = NULL;
printf("DONE3\n");
currentptr = *eventlist;
printf("DONE4\n");
while((currentptr->arrivaltime < newpointer->arrivaltime) && currentptr != NULL) /*on every loop previous and current pointer gets upgraded*/
{
printf("DONEW\n");
prevptr = currentptr;
currentptr = currentptr->next;
}
printf("DONEW\n");
if(prevptr != NULL)
{
printf("DONEW\n");
prevptr->next = newpointer;
newpointer->next = currentptr;
}
else
{
printf("DONEW\n");
newpointer->next = *eventlist; //?????
*eventlist = newpointer;
}
printf("DONE\n");
}
eventPtr eventlist = NULL;
add_event(&tempevent, &eventlist);
{
currentptr = *eventlist; //currentptr == NULL at this point
...............
while(currentptr->arrivaltime ....) // Segmentation
}
在代码中,“eventlist=NULL”传递到“add_event”。这就是分割的原因。
我认为在“添加事件”中使用“事件列表”之前,应该先执行“malloc()”以获取“事件列表”的条目。
你说问题很可能是在
while((currentptr->arrivaltime < newpointer->arrivaltime) && currentptr != NULL)
您想要测试currentptr=NULL
表示它可能为NULL。但是如果是这样的话,你的早期症状就会消失。首先测试NULL
,然后进行第二部分比较…:
while(currentptr != NULL && (currentptr->arrivaltime < newpointer->arrivaltime))
我正在实现一个类似于队列的双链接列表。因此,当我向列表中添加节点(例如5个节点)并清空列表并尝试向列表中添加新节点时,会出现分段错误(核心转储)。我不知道它为什么这么做。你能解释一下吗?
我试图在C中的双向链表上做插入排序。在这种状态下,我的代码让我陷入了一个没有结束的循环,吐出了8和9。 有人能好心解释一下“插入排序”方法是如何设计的吗? 我的链表是设计包含头,上一个,下一个和一些数据。 到目前为止这是我的代码 我的希望破灭了。请帮忙。
我第一次使用链表,必须创建一个可以在双链表末尾插入节点的函数。到目前为止我 Node类按顺序接受要存储的值、要指向的下一个指针的值和上一个指针的值。每当我试图在这里插入节点时,我都会得到一个错误,说有一个未处理的异常,并且在写入位置0x00000008时有访问冲突。 我不完全确定这里出了什么问题,但我认为这与根据错误消息取消引用空指针有关。我真的很感激有人帮忙解决这个问题。
我正在尝试为一个项目创建一个双链接列表容器。我不能使用任何std容器。必须对双链接列表进行排序。以下是我目前的代码: 我遇到的问题是在我的插入函数中。我正在使用调试器,并在以下行插入代码:list.insert(10);。 它正确地进入第一种情况,即head==nullptr并创建节点。当我进入下一行代码(list.insert(20))时,它会用这一行创建一个节点:node*node=newno
我的程序不断崩溃。我觉得我的逻辑有问题。请帮忙!谢谢
分段故障发生在“电流->prev->next=temp”上。我试图打印地址以了解为什么会发生这种情况,并发现在输入中第一个节点的前一个元素总是指向NULL。有人能解释为什么会发生这种情况以及如何修复它吗?谢谢你。