gpt4 book ai didi

c - C 循环中递增整数指针

转载 作者:行者123 更新时间:2023-11-30 14:45:53 25 4
gpt4 key购买 nike

我的原始代码按从最低到最大的顺序显示队列中的节点:

void display (queue *q) {
node *ptr = q->front;
int i = 0;
int size = q->size;
while (i <= size) {
while (ptr->id != i) {
ptr = ptr->next;
}
if (i == 0) {
printf("%d ", ptr->id);
printf("%d\n", ptr->running);
}
else {
printf("%d ", ptr->id);
}
i++;
ptr = q->front;
}

}

一直产生段错误(核心转储)错误。我已经对两个变量进行了 malloc 比较,并且此错误已得到修复。

void display (queue *q) {
node *ptr = malloc(10);
ptr = q->front;
int *i = NULL;
i = malloc(sizeof(int));
*i = 0;
int size = q->size;
while(*i <= size){
while (ptr->id != *i) {
ptr = ptr->next;
}
if (*i == 0) {
printf("%d %d\n", ptr->id, ptr->running);
}
else {
printf("%d %d %d %d\n", ptr->id, ptr->running, ptr->ready, ptr->blocked);
}
i = i + 1 * (sizeof(char));
ptr = q->front;
}

}

但是现在这不会产生我想要的输出。我想增加 i 指针,以便它可以与我的原始代码相同。

这非常令人沮丧,任何帮助将不胜感激!

最佳答案

如果我正确地阅读了您的第一个代码 list ,那么您至少需要考虑一件重要的事情。您似乎在这里有一个链接列表,并且您正在使用 ptr = ptr->next 迭代该列表。 。这意味着您需要知道何时停止。设置链接列表的一种常见方法是列表中的最后一项具有 next NULL 的值。然后一次处理一个节点,处理完一个节点后,检查 next 是否值为 NULL :如果不是,您可以继续移动下一个节点(如果是 NULL)你停下来。

在这里,您不会进行这样的检查,因此您需要另一种方法来确保您知道何时停止。您似乎正在做的是获取 q->size 的值并用它来告诉您链接列表中有多少项。因此,首先要考虑的是您对该值正确性的信心有多大。例如,如果构建列表的代码仅将两个项目放入列表中,则下注设置 size到三,您最终会从列表的末尾掉下来,并且段错误并非不可能。

但还有比这更重要的事情。即使您从 q->size 获取列表中正确数量的项目,您正在比较循环变量 isize像这样:

int i = 0;
while (i <= size) {

}

这将循环 i具有值 [ 0, 1, … size ],实际上是size + 1 次。如果你想精确循环size有时,您想要像 i < size 这样的测试而不是i <= size 。这是一个常见的错误,通常称为 off-by-one error .

不幸的是,您的第二个列表使事情变得复杂,而不是让事情变得更好。返回到您的第一个,看看是否可以解决我在这里提到的问题。

关于c - C 循环中递增整数指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52686878/

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