在 C 中的循环中递增整数指针



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

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("%dn", 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 %dn", ptr->id, ptr->running);
}
else {
printf("%d %d %d %dn", ptr->id, ptr->running, ptr->ready, ptr->blocked);
}
i = i + 1 * (sizeof(char));
ptr = q->front;
}

}

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

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

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

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

但还有比这更重要的事情。即使您从q->size获得列表中正确数量的项目,您也会将循环变量i与如下所示的size进行比较:

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

这将循环i具有值 [ 0, 1, ...size],实际上是size+1倍。如果你想准确地循环size次,你需要一个像i < size而不是i <= size这样的测试。这是一个常见的错误,通常称为逐个错误。

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

相关内容

  • 没有找到相关文章