【发布时间】:2011-10-29 05:36:38
【问题描述】:
首先,我是 C 的新手,并且被扔进了一个我必须使用 C 的程序。现在我相信我的问题与指针有关,但是当我尝试打印列表时(以确保我以正确的顺序存储它,我的程序在第二次循环后崩溃。
这是我的插入函数,它以所需的最短时间插入,我相信它是正确的,但由于我的打印崩溃而无法对其进行测试
void insertProcess(Process& process, Process* &head, Process* curr, Process* prev){
curr = head;
if(head == NULL){
head = &process;
}
else{
prev = head;
while(process.timeNeeded > curr->timeNeeded){
prev = curr;
curr = curr->next;
}
prev->next = &process;
process.next = curr;
}
}
这是我应该打印列表的简单循环。这将在给出“访问冲突读取位置”之前运行几次
while(curr->next != NULL){
printf("%s %i %i %i\n", process.processName, process.arrivalTime, process.timeNeeded, process.priority);
curr = curr->next;
}
我很确定错误会出现在这些代码段之一中,如果有任何帮助,我将不胜感激。
编辑:好的,在第一张海报的帮助下,我解决了最初的问题,但现在打印时出现了无限循环。我很确定这将是因为我按顺序插入并且从未在最后一项之后设置 NULL 指针。这看起来是否正确,如果是,有什么办法可以解决吗?再次感谢
【问题讨论】:
-
Process *&head不合法 c。你不能通过引用传递。 -
你是用 c++ 编译器编译这个吗?
-
其实我是我所熟悉的,我的班级在做什么,因为我们对C一无所知,也没有时间学习它。我们使用 C 的真正原因是我们不会使用 c++ 的面向对象属性。而且我知道当我这样做时似乎不对,但是每次我调用 insert 时都会重置 head,如果有其他方法可以做到这一点,我会很乐意修复它。
-
在 c 中,您可以将 head 传递为
Process **head。然后您可以使用(*head)->field和*head = newhead。这样,c 编译器就会接受它。
标签: c++ linked-list