4 / 4 / 0
Регистрация: 19.08.2013
Сообщений: 138
|
|||||||||||
1 | |||||||||||
В определенный момент массив почему-то обнуляется14.10.2017, 21:59. Показов 1781. Ответов 8
Метки нет Все метки)
(
Вот листинг:
Кликните здесь для просмотра всего текста
Но если переместить вывод на один уровень вложенности ниже, но всё работает: Кликните здесь для просмотра всего текста
Почему это происходит и как это победить? Если что, компиляю в VS 2017.
0
|
|
14.10.2017, 21:59 | |
Ответы с готовыми решениями:
8
Почему массив не обнуляется Почему массив путей файлов не обнуляется при выходе из программы Не обнуляется таймер почему-то Почему все обнуляется??? |
1392 / 1021 / 325
Регистрация: 28.07.2012
Сообщений: 2,810
|
|
14.10.2017, 23:25 | 2 |
fingolfin_, ты уверен, что в файле не менее 349920 чисел?
0
|
4 / 4 / 0
Регистрация: 19.08.2013
Сообщений: 138
|
|
14.10.2017, 23:34 [ТС] | 3 |
nonedark2008, да, ровно 349920. Не думаю, что проблема в файле, так как он заполнялся таким же циклом с помощью ofstream.
Добавлено через 5 минут В принципе, я бы мог работать напрямую с массивом и не использовать файл, но мне интересно. Лично для меня это очень странная и необычная проблема.
0
|
18473 / 9630 / 2356
Регистрация: 30.01.2014
Сообщений: 16,883
|
|
15.10.2017, 00:08 | 4 |
![]() Решение
2
|
4 / 4 / 0
Регистрация: 19.08.2013
Сообщений: 138
|
||||||
15.10.2017, 00:52 [ТС] | 5 | |||||
Я правильно понимаю, что будет равен 6? Оказывается, всё так банально
![]() Но теперь у меня возникло еще 3 вопроса: 1) Почему VS не ругается на использование неинициализированного элемента массива? 2) Почему расположение cout влияет на результат? Ведь если положить, что еще неинициализированный элемент будет выводиться как 0, то 0 должен быть в обоих случаях. 3) Насколько я понимаю, этот код
0
|
18473 / 9630 / 2356
Регистрация: 30.01.2014
Сообщений: 16,883
|
|
15.10.2017, 01:06 | 6 |
Потому что он не обязан ругаться. Язык с возможностью прямой работы с памятью требует дисциплины и ответственности от программиста.
Потому что во втором твоем примере корректный результат всех трех Digit[0] , Digit[1] , Digit[2] и Digit[3] контролируется условиями циклов.Нет, так нельзя положить. Вывод неициализированного значения - это UB. Это потому, что у тебя есть еще один цикл Нельзя программировать методом тыка. Не можешь удержать в голове работу с таким большим массивом (что вполне резонно), сделай массив обозримо меньше и распиши на бумажке итерации.
1
|
4 / 4 / 0
Регистрация: 19.08.2013
Сообщений: 138
|
|
15.10.2017, 14:59 [ТС] | 7 |
Спасибо, теперь все проблемы решены!
Почему же нельзя? Написать код, попробовать собрать, запустить, потом исправить ошибки и по новой, нет? У меня пока очень редко получается, что бы написанный код сразу работал без ошибок. Обычно я такие ошибки по невнимательности сразу сам исправляю, но здесь две ошибки (неучитывание Digit[4] в выражении и вывод неинициализированного значения) наложились и совсем сбили меня с толку. Спасибо за разъяснения!
0
|
1392 / 1021 / 325
Регистрация: 28.07.2012
Сообщений: 2,810
|
|
15.10.2017, 15:13 | 8 |
Метод тыка - это когда ты не знаешь, где находится ошибка, и начинаешь исправлять случайные места.
Как раз твой случай: Ты что-то поменял в случайном месте, а потом уверовал, что "все" стало работать. Такой подход приводит к еще большему непониманию и еще большему количеству ошибок.
1
|
18473 / 9630 / 2356
Регистрация: 30.01.2014
Сообщений: 16,883
|
|
15.10.2017, 15:14 | 9 |
Потому что это контрпродуктивно. И делает тебя зависимым от случая. Верно работающий код не гарантия, что в нем нет ошибок. UB может и совершенно ожидаемым образом проявляться, создавать видимость работы (до поры). Поэтому ты должен понимать от и до что у тебя в программе происходит, а не проверять корректность методом тыка. И дело не в возможности писать код сразу без ошибок, речь не об этом, а в возможности понять, что у тебя в коде не так не только на основе многочисленных проб, а на основе понимания того как программа работает и должна работать. Поэтому, если ты не понимаешь как она работает, надо сесть и разобраться, а не мучить компилятор запусками в надежде, что сработает.
1
|
15.10.2017, 15:14 | |
15.10.2017, 15:14 | |
Помогаю со студенческими работами здесь
9
Почему обнуляется поле? Обнуляется переменная почему ?
Почему мой указатель обнуляется? Почему не обнуляется указатель через функцию?
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |