【发布时间】:2018-10-07 08:46:12
【问题描述】:
我的原始代码按从小到大的顺序显示队列中的节点:
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 指针,以便它可以与我的原始代码相同。
这非常令人沮丧,任何帮助将不胜感激!
【问题讨论】:
-
你这里有内存泄漏
node *ptr = malloc(10);ptr = q->front; -
为什么要动态分配单个
int?为什么要乘以sizeof(char),根据定义,它是 1? -
@melpomene:这是我找到的修复分段错误的方法,我乘以 sizeof(char) 作为指针加 1 的尝试
-
您的第二种方法不能解决分段错误,这只是您没有遇到这种情况的事实。
-
@Jason 提供了minimal reproducible example 和更多背景信息,我们可以为您提供帮助。
标签: c pointers segmentation-fault malloc