2013-02-24 1 views
2
==13890== Conditional jump or move depends on uninitialised value(s) 
==13890== at 0x4E7E4F1: vfprintf (vfprintf.c:1629) 
==13890== by 0x4E878D8: printf (printf.c:35) 
==13890== by 0x400729: main (001.c:30) 
==13890== Uninitialised value was created by a stack allocation 
==13890== at 0x400617: main (001.c:11) 

Линии на который ссылается:значения неиницализированного было создано распределением стеки

int limit = atoi(argv[1]); 

Я не уверен, как это исправить. Я попытался выполнить поиск в stackoverflow и google, но я не смог найти решение.

Редактировать:This является ссылкой на полный код.

+1

Показать еще код. Проблема почти всегда в другом месте. – hyde

+1

Строка 30 является 'return 0;', и нет причин для этой строки иметь что-либо связанное с printf. Я получаю ощущение, что выход valgrind не синхронизирован с кодом. – Sebivor

+0

@Bart Судя по ответам Барта и комментариям OP на нем, вы редактировали * исправленный * код в вопросе; код, который больше не демонстрирует проблему. Это не полезно. –

ответ

10

Вы проверили argc и содержание argv[1]? Is argv[1] гарантированно не NULL для того, чтобы поместить в качестве ввода для atoi? Возможно ли, что atoi может возвращать представление ловушки, представляющее неинициализированное значение, из-за того, что argv[1] не является числовым?

Редактировать: После просмотра полного кода я понял, что это не проблема, и ваш диагноз неверен. Ваша проблема здесь: for (i = 0; i <= count; i++) { sum += numbers[i]; } Когда i == count, numbers[i] неинициализирован. Это связано с тем, что счетчик увеличивается после последнего присвоения numbers[count] в предыдущем цикле: numbers[count] = i; count++;. Следовательно, печать суммы приводит к вашему сообщению, потому что сама сумма зависит от неинициализированной ценности. Возможно, вы имели в виду for (i = 0; i < count; i++) { sum += numbers[i]; }

+0

Я проходил мимо "10", например:. ./001 10'. Кроме того, программа работает, но я просто хочу знать, почему я получаю эту ошибку. Я отредактирую ссылку на полный код. –

+0

Это исправлено! Спасибо за помощь! –