开发者

Conditional jump or move depends on uninitialised value pointing to the first line of code

I have a program that crashes after some days of work, so I decided run it with Valgrind. I have cleaned up all the warnings but this one:

==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 is the first line of the program:

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

I think I already cleaned up 开发者_如何学Call the bugs, but it still get me mad. What's up?

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

A couple lines before this:

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

milisecs1 is initialised.


The problem is that in the list of variables created at the start of main(), there is at least one that is still uninitialized when you read it on line 548.

Since you've not shown what's at line 548, nor what is between line 80 and 548, we can't easily tell you more. But concentrate on line 548 - not line 80.


If line 548 is:

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

then analyze where 'tiempo_milisecs' is set. If that's set cleanly, then you need to look at where listado_ips->ocr is set. We can reasonably safely assume that listado_ips itself (the pointer) is initialized.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜