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

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

Динамический массив [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]

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


Наверх

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