Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Project/Options/Compiler/ RANGE CHECKING


Страницы:   1 2

DevilDevil ©   (2007-02-02 13:21:00) 

Довольно долго мучился переделывал одну библиотеку, довёл до нужного мне состояния; всё работало великолепно. Переношу полученную библиотеку в новый проект, запускаю, - RunTime Error 216 (это ошибка доступа к памяти). Долго мучился, перекидывал проект из папки в папку, менял опции компилятора.... то работает, то НЕТ. В конце концов пришёл к выводу, что ошибки возникают если ставить в опциях компилятора флажок "Range Checking", если убирать, то всё нормально работает. Так вот собственно вопросы:

1) что из себя представляет эта опция компилятора
2) из-за чего чаще всего возникают такие ошибки
3) какие подводные камни могут мне встретиться при поиске места ошибки
4) пару советов, как обнаружить ошибку с "наименьшими потерями". Дело в том, что там очень много кода; преимущественно на ассмбелере.

Заранее Спасибо!


evvcom   (2007-02-02 18:08:00) [21]

> [9] DevilDevil ©   (02.02.07 17:48)
> 1) что из себя представляет эта опция компилятора

Компилятор вставляет код проверки на выход за границы массивов.

> 2) из-за чего чаще всего возникают такие ошибки

при выходе за границы массива

> 3) какие подводные камни могут мне встретиться при поиске
> места ошибки

По-моему, там все элементарно. Смотришь стек, находишь самую верхнюю свою функцию. Дабл клик по ней. В подсвеченной строке или на одну выше идет обращение к массиву по "неправильному" индексу. Его и кури.

> 4) пару советов, как обнаружить ошибку

См. выше.

> преимущественно на ассмбелере

на этот код интересующая тебя галка не влияет.


DevilDevil   (2007-02-02 17:50:00) [22]

P.S. единственным информативным постом считаю Плохиш ©   (02.02.07 16:31) [8]


> TRUNK ©   (02.02.07 14:14) [2]
> Сергей М. ©   (02.02.07 14:27) [3]


Что он сказал неправильно?


DevilDevil   (2007-02-02 17:48:00) [23]

Предлагаю всё же посуществу!
актуальны последние вопросы:
1) что из себя представляет эта опция компилятора
2) из-за чего чаще всего возникают такие ошибки
3) какие подводные камни могут мне встретиться при поиске места ошибки
4) пару советов, как обнаружить ошибку с "наименьшими потерями". Дело в том, что там очень много кода; преимущественно на ассмбелере.


Плохиш   (2007-02-02 16:31:00) [24]


> DevilDevil ©   (02.02.07 13:21)  

Это обращение к несуществующему объекту, скорее всего. Кстати, эта же ошибка возникает в Д7 при использовании строк в секции финализации модулей...


Kolan   (2007-02-02 15:26:00) [25]

> всё работало великолепно
запускаю, - RunTime Error 216


Аж мурашки по коже. Отвратительная ситуация... :(


clickmaker   (2007-02-02 15:25:00) [26]


> [5] DrPass ©   (02.02.07 15:18)
> только при включенном Range Checking программа тебе об этом сообщает

меньше знаешь - крепче спишь )


DrPass   (2007-02-02 15:18:00) [27]


> В конце концов пришёл к выводу, что ошибки возникают если
> ставить в опциях компилятора флажок "Range Checking", если
> убирать, то всё нормально работает

Скажем так - ошибки возникают в обоих случаях, но только при включенном Range Checking программа тебе об этом сообщает


evvcom   (2007-02-02 14:34:00) [28]

> [0] DevilDevil ©   (02.02.07 13:21)
> "Range Checking", если убирать, то всё нормально работает

Это тебе только кажется :(


Сергей М.   (2007-02-02 14:27:00) [29]


> TRUNK ©   (02.02.07 14:14) [2]


> ERangeError возникает, например, если происходит запись
> числа в переменную, которая не может уместить его полностью
> ввиду недостатка битов; или при присвоении отрицательного
> числа беззнаковой переменной.


Ты эту траву больше не кури)


TRUNK   (2007-02-02 14:14:00) [30]

ERangeError возникает, например, если происходит запись числа в переменную, которая не может уместить его полностью ввиду недостатка битов; или при присвоении отрицательного числа беззнаковой переменной.
Так же может возникнуть в таком коде (если Count=0):

var
i: Cardinal;
begin
for i := 0 to Count-1 do
 ...
end;


Anatoly Podgoretsky   (2007-02-02 13:29:00) [31]

> DevilDevil  (02.02.2007 13:21:00)  [0]

Ошибка диапазона и правильно работает - не верю.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо