Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.043 c
15-1138016916
Pazitron_Brain
2006-01-23 14:48
2006.02.12
Оцените творчество моего брата.


2-1138181801
Ell
2006-01-25 12:36
2006.02.12
Часть строковой переменной


11-1119344397
вад
2005-06-21 12:59
2006.02.12
E-mail


15-1138006476
Nic
2006-01-23 11:54
2006.02.12
Меня перевели с учебного мастера на инженера :)


15-1137727459
Репортер
2006-01-20 06:24
2006.02.12
Отчеты с графикой и текстом





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский