条件跳转或移动取决于指向第一行代码的未初始化值

时间:2011-05-30 17:00:08

标签: c valgrind

我有一个程序在经过几天的工作后崩溃了,所以我决定用Valgrind运行它。我清理了所有的警告,但是这个:

==30522== Conditional jump or move depends on uninitialised value(s) 
==30522==    at 0x405E32: main (main.c:548)
==30522==  Uninitialised value was created by a stack allocation
==30522==    at 0x405652: main (main.c:80)

main.c:80是该计划的第一行:

int main(int argc, char *argv[])
{  // <- this is the line 80

我想我已经清除了所有的错误,但它仍然让我发疯。怎么了?

                    listado_ips->ocr=(float)listado_ips->ocr/tiempo_milisecs; // <-line 548

在此前几行:

milisecs1=milisecs1-milisecs2
tiempo_milisecs=(float)milisecs1/1000;

milisecs1已初始化。

1 个答案:

答案 0 :(得分:4)

问题在于,在main()开头创建的变量列表中,至少有一个在第548行读取时仍未初始化。

由于你没有显示第548行的内容,也没有显示第80行和第548行之间的内容,我们不能轻易地告诉你更多内容。但要专注于548行 - 而不是第80行。


如果第548行是:

listado_ips->ocr=(float)listado_ips->ocr/tiempo_milisecs;

然后分析设置'tiempo_milisecs'的位置。如果设置得很干净,那么您需要查看listado_ips->ocr的设置位置。我们可以合理安全地假设listado_ips本身(指针)已初始化。