![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Динамический массив [D7, XP]
stef © (2006-01-24 04:35:00)Проблема такая.
Завожу динамический массив.
По событию создания формы устанавливаю его длинну
Далее в программе забиваю его и работую с ним (пока все нормально)
Как только пытаюсь закрыть одну из форм приложения (а в приложении их 10), вылетает ошибка чтения данных по адресу 00000000.
Если заменить динамический массив на обычный все работает нормально.
Может их создавать как объекты надо?
ЮЮ (2006-01-24 06:37:00) [1]
> а что это значит?
При включенном Range Checking при выходе за границы массива в RunTime будет исключение. При выключенном можно из без AV "работать" вне диапазона
stef (2006-01-24 06:19:00) [2]
> ЮЮ © (24.01.06 06:09) [4]
Что значит сразу или динамически. По FormCreate главной формы пишу
SetLength(Driver_s,countAvt);
и больше нигде ничего с длинной не делаю.
CountAvt это длина файла которая вычисляется двумя строками выше.
Сразу говорю - файл существует, доступ открыт и т.д.
Доступ собственно говоря только в двух местах программы и строго по индексу, так что и тут ошибки быть не должно.
А вот что касается Range Checking, то выключено. Извините за темноту, а что это значит?
ЮЮ (2006-01-24 06:09:00) [3]Длину устанавливаешь сразу или динамически?
Ссылки на элементы массива нигде не используещь? Т.е. доступ строго по индексу? Range Checking в опциях проекта включено?
stef (2006-01-24 05:55:00) [4]
> Джо © (24.01.06 04:36) [1]
Переменная массива описана в отдельном модуле без формы.
> Юрий Зотов © (24.01.06 04:41) [2]
1 DLL ни каких не используется.
2 Массив содержит записи.
3 Да. Если только заменить строки
var
Driver_s:array of TDriver;
Avto_s:array of TAvto;
на
var
Driver_s:array[0..50] of TDriver;
Avto_s:array[0..50] of TAvto;
и закоментировать строки SetLength(..) для них, то все сразу начинает работать. Так что это именно массив (по крайней мере логично было бы предположить, что это именно массив).
4 У меня в приложении такое событие не отслеживается ни для одной формы.
К тому же:
Если есть одна главная форма и еще девять дополнительных, которые по нажатию определенных кнопок просто показываются на экране, а затем по нажатию на крестик показанной формы они скрываются, т.е. Show/Hide, то я думаю OnDestroy здесь нипричем.
Ошибка вылетает уже после того как форма скрылась.
Юрий Зотов (2006-01-24 04:41:00) [5]В дополнение к [1]:
1. DLL используется?
2. Что содержит массив?
3. Уверены, что ошибка связана именно с массивом?
4. Брейкпойнт в OnDestroy любой формы и пройти отладчиком.
Джо (2006-01-24 04:36:00) [6]Где описана переменная массива?