Ошибка в блоке try... except

Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду

Ответить
Хыиуду
Сообщения: 2442
Зарегистрирован: 06 мар 2005, 21:03
Откуда: Москва
Контактная информация:

Код: Выделить всё

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, программа падает с ошибкой. В чем может быть причина?
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Аватара пользователя
somewhere
Сообщения: 1858
Зарегистрирован: 31 авг 2006, 17:14
Откуда: 71 RUS
Контактная информация:

Tools\Debugger options\Integrated Debugging - OFF

А вот на блок Except она по-любому пойдет после закрытия окна EAccessViolation и продолжения выполнения
It's a long way to the top if you wanna rock'n'roll
Лелик_1044
Сообщения: 340
Зарегистрирован: 22 ноя 2004, 19:15
Откуда: Минск
Контактная информация:

Подожи у тебя же массивы одномерные, а ты работаешь с ними как с многомерными
Просто набрать исходники может и любая обезьяна, а придумать и отладить не каждый человек.
Хыиуду
Сообщения: 2442
Зарегистрирован: 06 мар 2005, 21:03
Откуда: Москва
Контактная информация:

2 Somewhere:
Спасибо, а какая-нибудь директива компилятора для этого есть?
2 Лелик:
fr - одномерный, работаю с ним как с одномерным
frmatrix - двухмерный, работаю с ним, как с двухмерным.
В чем проблема?
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
namor
Сообщения: 6
Зарегистрирован: 16 сен 2004, 16:44
Откуда: Белая Церковь

frmatrix задекларирован как одномерный, а работаешь ты с ним как сдвухмерным
Хыиуду
Сообщения: 2442
Зарегистрирован: 06 мар 2005, 21:03
Откуда: Москва
Контактная информация:

namor писал(а):frmatrix задекларирован как одномерный, а работаешь ты с ним как сдвухмерным
frmatrix:array[0..2] of array of TFrame
Массив массивов - где же он одномерный?
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Аватара пользователя
somewhere
Сообщения: 1858
Зарегистрирован: 31 авг 2006, 17:14
Откуда: 71 RUS
Контактная информация:

Хыиуду, к сожалению компилятор и дебагер - вещи не связаные. Дебагер - это как Tool Дельфи, можно сказать Built-in tool. Когда в проге возникает Exception первым делом его подхватывает Integrated Debugger и говорит что, где и как произошло. Но потом по твоему велению прога продолжает выполнение и это исключение идет дальше в Except. Т.е. если запускать чисто один EXE не из среды Delphi исключение Дебагер не поймает, потому как в памяти сидеть не будет. Копилятор только создает код - он может создать избыточный код для проверки диапазонов, переполнений, ошибок I/O, а уж если исключение возникло, то это уже по части ОС, которой Try и Except говорят кто и где захендлил такое-то исключение.
It's a long way to the top if you wanna rock'n'roll
Ответить