Страница 1 из 1
Ошибка в блоке try... except
Добавлено: 16 янв 2007, 21:42
Хыиуду
Код: Выделить всё
var fr:array[0..2] of TFrame;
frmatrix:array[0..2] of array of TFrame
{...}
try
fr[0]:=frmatrix[0,0];
except
{...}
В начале блока try массив fr содержит (nil,nil,nil), массив fr - 3 пустых массива длиной 0. Программа доходит до команды в блоке try, пытается выполнить присвоение и, естественно, неудачно. Однако вместо того, чтобы перейти на блок except, программа падает с ошибкой. В чем может быть причина?
Re: Ошибка в блоке try... except
Добавлено: 17 янв 2007, 09:12
somewhere
Tools\Debugger options\Integrated Debugging - OFF
А вот на блок Except она по-любому пойдет после закрытия окна EAccessViolation и продолжения выполнения
Re: Ошибка в блоке try... except
Добавлено: 17 янв 2007, 11:16
Лелик_1044
Подожи у тебя же массивы одномерные, а ты работаешь с ними как с многомерными
Re: Ошибка в блоке try... except
Добавлено: 17 янв 2007, 14:44
Хыиуду
2 Somewhere:
Спасибо, а какая-нибудь директива компилятора для этого есть?
2 Лелик:
fr - одномерный, работаю с ним как с одномерным
frmatrix - двухмерный, работаю с ним, как с двухмерным.
В чем проблема?
Re: Ошибка в блоке try... except
Добавлено: 17 янв 2007, 22:05
namor
frmatrix задекларирован как одномерный, а работаешь ты с ним как сдвухмерным
Re: Ошибка в блоке try... except
Добавлено: 17 янв 2007, 22:10
Хыиуду
namor писал(а):frmatrix задекларирован как одномерный, а работаешь ты с ним как сдвухмерным
frmatrix:array[0..2] of array of TFrame
Массив массивов - где же он одномерный?
Re: Ошибка в блоке try... except
Добавлено: 18 янв 2007, 14:07
somewhere
Хыиуду, к сожалению компилятор и дебагер - вещи не связаные. Дебагер - это как Tool Дельфи, можно сказать Built-in tool. Когда в проге возникает Exception первым делом его подхватывает Integrated Debugger и говорит что, где и как произошло. Но потом по твоему велению прога продолжает выполнение и это исключение идет дальше в Except. Т.е. если запускать чисто один EXE не из среды Delphi исключение Дебагер не поймает, потому как в памяти сидеть не будет. Копилятор только создает код - он может создать избыточный код для проверки диапазонов, переполнений, ошибок I/O, а уж если исключение возникло, то это уже по части ОС, которой Try и Except говорят кто и где захендлил такое-то исключение.