Условный переход или перемещение зависит от неинициализированного значения, указывающего на первую строку кода - PullRequest
0 голосов
/ 30 мая 2011

У меня есть программа, которая вылетает после нескольких дней работы, поэтому я решил запустить ее с 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 Ответ

4 голосов
/ 30 мая 2011

Проблема в том, что в списке переменных, созданных в начале main(), есть хотя бы одна, которая все еще неинициализирована, когда вы читаете ее в строке 548.

Поскольку вы не показали, что находится в строке 548, и что находится между строкой 80 и 548, мы не можем легко сказать вам больше. Но сконцентрируйтесь на строке 548, а не на строке 80.


Если строка 548:

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

, затем проанализируйте, где установлено «tiempo_milisecs». Если он установлен правильно, то вам нужно посмотреть, где установлен listado_ips->ocr. Мы можем разумно предположить, что сам listado_ips (указатель) инициализирован.

...