c - 在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("%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 指针,以便它可以与我的原始代码相同。
这非常令人沮丧,任何帮助将不胜感激!
解决方案
如果我正确阅读了您的第一个代码清单,那么您至少需要考虑一件重要的事情。您似乎在这里有一个链接列表,并且您正在使用ptr = ptr->next
. 这意味着您需要知道何时停止。建立链表的一种常见方式是链表中的最后一项的next
值为NULL
。然后一次处理一个节点,完成一个节点后,检查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
. 这是一个常见的错误,通常称为一个错误。
不幸的是,您的第二个列表使事情复杂化,而不是使它们变得更好。回到你的第一个,看看你能不能解决我在这里提到的问题。
推荐阅读
- javascript - 无法处理角度 2+ 中的意外错误
- python - 我已经安装的 PIP 包是否已移动到我的虚拟环境中?
- java - 从 .class 文件中恢复已删除的 Spock 测试用例
- r - 潜在类别分析减少观察次数?
- jquery - 通过按钮推送到 laravel 上的 jquery ajax 返回视图返回到部分动态变化
- sqoop - 如何在 Sqoop 中动态导入表?
- apache-spark - 嵌套 json 中的结构化流式传输不同模式
- node.js - Mocha --watch 测试导致数据库错误
- amazon-web-services - 连接到不同 aws 区域中可用的 Redis
- javascript - Promise((resolve,reject)=>{}) 和 Promise(resolve =>{}) 有什么区别?