Форум: "Начинающим";
Текущий архив: 2006.02.12;
Скачать: [xml.tar.bz2];
ВнизДинамический массив Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.061 c