![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Project/Options/Compiler/ RANGE CHECKING
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]
Ошибка диапазона и правильно работает - не верю.