PDA

Просмотр полной версии : Глюки недогруженных программ



Arix
13.06.2018, 23:40
Допустим, загрузка программы с магнитофона прерывается из-за ошибки чтения. Или я выключил магнитофон. Компьютер написал Device I/O error. По идее, что должно получиться? Листинг программы должен выглядеть нормально до места обрыва, а на месте обрыва должен просто прерваться и всё. Если программа выполняется последовательно, без переходов, то до места обрыва она, по идее должна работать. Однако всё не так. На месте обрыва - катастрофические разрушения, множество бессмысленных символов, иногда на несколько экранов. И в загруженной части могут быть повреждения - замененные буквы, бессмысленный текст. Бывает, что сбой загрузки произошел в конце программы, листинг нормальный до конца, никаких видимых повреждений. Но программа всё равно не работает. Хотя, может и работать. Один раз у меня было: небольшая программа, секунд на 20. Я выключил магнитофон на первой секунде основного "тела". Нажимаю LIST - всё на месте! Всё целое. Откуда оно взялось? Но при попытке запустить её компьютер перезагрузился. Но самое интересное, что недогруженную программу невозможно пересохранить, записывается примерно одна секунда. При попытке же её исправить, отредактировать, удалить место разрыва, начинаются всякие глюки. Удалил бессмыслицу в одном месте, она вылезает где-то в другом.
Почему так происходит? Просто интересно.

MacBuster
14.06.2018, 09:21
Листинг программы должен выглядеть нормально до места обрыва, а на месте обрыва должен просто прерваться и всё.
Нет, не так. Как минимум последний байт может выглядеть как угодно, и интерпретироваться совершенно неожиданно. Вы в отладчике память смотрели?

Arix
14.06.2018, 21:20
Вы в отладчике память смотрели?
Нет. У меня не было отладчика, да и сейчас нет. А тогда я даже слова такого не знал. :)

Denn
15.06.2018, 11:50
Текст программы - это определённая структура данных, её нарушение может приводить к совершенно неожиданным глюкам. И логика "должно быть ок до места обрыва" тут не работает.
ПО в любом случае считает, что текст загружен полностью, т.о. при выводе пытается отображать содержимое ОЗУ, а там начиная с места обрыва идёт какой-то мусор (пустоты в ОЗУ не бывает).
Ошибки в тексте до места обрыва скорее всего свидетельствуют о реальных сбоях и во время загрузки этих участков. Т.е. даже если бы текст загрузился до конца, всё равно всплыла бы ошибка контрольной суммы из-за фактически битых данных.