bash.im ithappens.me zadolba.li
7425

Кучка с горкой

4 октября 2011, 11:45

Выполнял лабораторную работу по программированию под DOS (чтоб не забывать историю, наверное) на старом компиляторе, который в прогу добавляет проверку на присваивание нулевому указателю. Начали появляться сообщения об этом ошибочном присваивании. Для локализации ошибки закомментировал часть кода. Всего осталось примерно 800 строк кода на C++, в которых могла быть ошибка. Перечитал весь код, исправил пару ошибок. Ошибка пропала. Начал убирать комментарии — появилась опять. Ясно, что где-то глюк с указателем, и на ход выполнения программы влияет её размер. Ещё два раза перечитал весь код, нарыл пару мест, где можно было бы добавить проверки. Ошибка осталась. Под отладчиком в режиме ассемблера начал изучать код. Узнал подробности работы конструкторов и деструкторов классов, начал исследовать структуру хипа…

А потом что-то дёрнуло меня посмотреть, какого размера файл. 70 КБ при модели памяти в один сегмент. Код + данные + стек + хип > 64 КБ. А компилятор хоть бы предупредил…

Программисты, не забывайте русскую пословицу: «Доверяй, но проверяй».