gpt4 book ai didi

c++ - 打印时无限循环

转载 作者:太空狗 更新时间:2023-10-29 21:49:41 27 4
gpt4 key购买 nike

首先,我是 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,这意味着该函数将在Process 对象的本地拷贝上运行函数退出时将被销毁。

然而,您的代码链接到这个本地拷贝中,因此一旦您退出该函数,您的链接列表现在正在使用一个已经被销毁的 Process 对象。

另一个问题是,当循环搜索插入点时,您没有考虑插入的进程可能是最后一个进程的情况,在这种情况下,curr 将在循环中变为 NULL。

关于c++ - 打印时无限循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7937211/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com