Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Теоретические вопросы _ 16-разрядная подсистема MS-DOS

Автор: DarkWishmaster 7.04.2011 20:55

Пытаюсь скомпилировать:
Програма должна выяснить если существует путь в лабиринте от точки А к Б.

COD (Показать/Скрыть)

Пишет что NTVDM нашла недопустимую инструкцию. Погуглил, поискал на форуме, способа решение нашел два : перейти на 32-бит компилятор или сменить ОСь.
Но ошибка только в этой програме, пробовал запустить ранее сохраненые, и быстро понаписал "Hello World" и другие мини-програмы, всё работает, тогда причем тут MS-DOS?

Автор: TarasBer 7.04.2011 21:01

ДОС ни при чём.
Ошибка в твоей программе.
Нажми Options->Compiler и поставь там контроль переполнения стека и контроль выхода за пределы массива.

Просто у тебя программа из-за ошибки затирает код, и на месте кода получается та самая недопустимая инструкция. Да, в защищённой оси (в том числе в винде) программа не будет молча затирать код, она выдаст ошибку записи (защита памяти на уровне процессора). Но работать всё равно не будет. Так что сначала отладь программу.

Автор: DarkWishmaster 7.04.2011 21:07

Цитата(TarasBer @ 7.04.2011 17:01) *

ДОС ни при чём.
Ошибка в твоей программе.
Нажми Options->Compiler и поставь там контроль переполнения стека и контроль выхода за пределы массива.

Просто у тебя программа из-за ошибки затирает код, и на месте кода получается та самая недопустимая инструкция. Да, в защищённой оси (в том числе в винде) программа не будет молча затирать код, она выдаст ошибку записи (защита памяти на уровне процессора). Но работать всё равно не будет. Так что сначала отладь программу.


Спасибо!
Ошибка было в том что у меня array[1..maxn, 1..maxn] а барьер я заполняю с for i:=0 ... как я этого не заметил...

Автор: volvo 7.04.2011 21:21

Цитата
а барьер я заполняю с for i:=0 ... как я этого не заметил...
Если программа компилируется с включенной опцией Range Checking (http://forum.pascal.net.ru/index.php?s=&showtopic=24644&view=findpost&p=136483 /в самом низу поста/... Не хотите слушать - ловите ошибки дальше), то все, что произойдет - это вылет с указанием места ошибки.