【发布时间】:2012-06-07 09:24:19
【问题描述】:
我在 valgrind 中遇到了几个错误,指的是我的代码的一部分。基本上我有一个充当队列的结构链接列表。这是我的入队函数:
PcbPtr enqPcb(PcbPtr *headofQ, PcbPtr process){
PcbPtr c = *headofQ;
PcbPtr d = c;
if (!*headofQ) {
*headofQ = process;
return *headofQ;
}
while (c->next) {
c = c->next;
}
c->next = process;
return d;
}
PcbPtr 是一个指向结构的指针。 Valgrind 在 while 循环中给了我各种各样的东西“条件跳转或移动取决于未初始化的值”等。这有什么明显的错误,还是超出了我所包含的范围?谢谢
【问题讨论】:
-
和你的问题无关,但是为什么要使用中间变量
d,什么时候可以直接返回*headofQ呢? -
好问题。我认为这是一些调试的残余:)
-
@JoachimPileborg:你知道吗,我多次看到初级程序员使用这样的中间变量。我不知道为什么。许多初级程序员的心理中有些东西引发了这种情况:这很普遍。 (另一方面,OP 的风格似乎比较成熟,因此在他的案例中,中间体不太可能是事先修改代码的产物。)
-
我认为错误很可能不在此代码中;很可能列表填充不正确。
-
您是否使用
--track-origins=yes选项运行了valgrind?然后它应该会告诉你未初始化的内存来自哪里。