Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.02.12;
Скачать: CL | DM;

Вниз

Динамический массив   Найти похожие ветки 

 
stef ©   (2006-01-24 04:35) [0]

Проблема такая.
Завожу динамический массив.
По событию создания формы устанавливаю его длинну
Далее в программе забиваю его и работую с ним (пока все нормально)
Как только пытаюсь закрыть одну из форм приложения (а в приложении их 10), вылетает ошибка чтения данных по адресу 00000000.
Если заменить динамический массив на обычный все работает нормально.
Может их создавать как объекты надо?


 
Джо ©   (2006-01-24 04:36) [1]

Где описана переменная массива?


 
Юрий Зотов ©   (2006-01-24 04:41) [2]

В дополнение к [1]:
1. DLL используется?
2. Что содержит массив?
3. Уверены, что ошибка связана именно с массивом?
4. Брейкпойнт в OnDestroy любой формы и пройти отладчиком.


 
stef ©   (2006-01-24 05:55) [3]


> Джо ©   (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 06:09) [4]

Длину устанавливаешь сразу или динамически?
Ссылки на элементы массива нигде не используещь? Т.е. доступ строго по индексу? Range Checking в опциях проекта включено?


 
stef ©   (2006-01-24 06:19) [5]


> ЮЮ ©   (24.01.06 06:09) [4]

Что значит сразу или динамически. По FormCreate главной формы пишу
 SetLength(Driver_s,countAvt);

и больше нигде ничего с длинной не делаю.
CountAvt это длина файла которая вычисляется двумя строками выше.
Сразу говорю - файл существует, доступ открыт и т.д.

Доступ собственно говоря только в двух местах программы и строго по индексу, так что и тут ошибки быть не должно.

А вот что касается Range Checking, то выключено. Извините за темноту, а что это значит?


 
ЮЮ ©   (2006-01-24 06:37) [6]


> а что это значит?

При включенном Range Checking при выходе за границы массива в RunTime будет исключение. При выключенном можно из без AV "работать" вне диапазона



Страницы: 1 вся ветка

Текущий архив: 2006.02.12;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.054 c
6-1131098835
kazar
2005-11-04 13:07
2006.02.12
компоненты indy


15-1137669571
Хинт
2006-01-19 14:19
2006.02.12
Тормозит при операциях с файлами


3-1134735715
rwg
2005-12-16 15:21
2006.02.12
Связывание таблиц


15-1137960823
Udaff
2006-01-22 23:13
2006.02.12
Замучился уже


2-1137969372
Mad_Bob
2006-01-23 01:36
2006.02.12
Одни и те же процедуры, а эффект разный