Страница 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 говорят кто и где захендлил такое-то исключение.