![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы
![]() |
Поиск в этой теме
![]() |
![]() |
#1 |
Пользователь
Регистрация: 17.02.2008
Сообщений: 74
|
![]()
Здравствуйте.
Еще раз о EAccessViolation. ![]() В моей программе несколько динамических массивов. Ошибка выскакивает при закрытии программы. Ошибка возникает только после инициирования любого из массивов, т.е. если открыл и сразу-же закрыл программу, не нажимая другие кнопки - ошибка не появляется. ОШИБКА: Project Project.exe raised exeption class EAccessViolation with message 'Access violation at address 00401B43 in module 'Project.exe'. Read of address 00000000. ПРОЦЕДУРА ЗАКРЫТИЯ: procedure TfmMain.aExitExecute(Sender: TObject); begin Dist:= nil; ZMatrix:= nil; Table:= nil; Klaster:= nil; fmMAin.Close; end; Подскажите, пожалуйста, где искать глюк? |
![]() |
![]() |
![]() |
#2 |
*
Старожил
Регистрация: 22.11.2006
Сообщений: 9,201
|
![]()
Ставим брэкпойнт на строку
Dist:= nil; Дальше идем по шагам (F8) и смотрим, где программа "спотыкается". "Read of address 00000000" как правило, однозначно указывает на обращение к несуществующему объекту (переменной). Подозреваю, что вы не все их создаете, зато все "чохом" (т.е. не думая) пытаетесь "занилить"... Либо какая-то из пар связана "родственными" отношениями и, как минимум одна из строк является лишней. Последний раз редактировалось mihali4; 22.02.2009 в 23:38. |
![]() |
![]() |
![]() |
#3 |
Пользователь
Регистрация: 17.02.2008
Сообщений: 74
|
![]()
Переписал код:
procedure TfmMain.aExitExecute(Sender: TObject); begin If Klaster <> nil Then Klaster:= nil; If Table <> nil Then Table:= nil; If ZMatrix <> nil Then ZMatrix:= nil; If Dist <> nil Then Dist:= nil; fmMAin.Close; end; Все равно ошибка. |
![]() |
![]() |
![]() |
#4 |
Форумчанин
Регистрация: 06.06.2007
Сообщений: 282
|
![]()
Andre1723, Было бы неплохо весь код просмотреть. Тогда можно точно сказать в чем проблема.
Не важно, как часто вы падаете. Важно, как часто вы поднимаетесь. Винс Ломбарди.
|
![]() |
![]() |
![]() |
#5 |
Пользователь
Регистрация: 17.02.2008
Сообщений: 74
|
![]()
У меня в программе еще пара локальных массивов. Похоже придется их обнулять по мере НЕнадобности.
Процедура "Readsp" в отдельном модуле. В ней просто данные "RECORD" перегоняются в "ARRAY". Последний раз редактировалось Andre1723; 23.02.2009 в 00:47. Причина: ошибки |
![]() |
![]() |
![]() |
#6 |
Форумчанин
Регистрация: 06.06.2007
Сообщений: 282
|
![]()
Возможно проблема в индексации. В статичсеких массивах вы указываете диапазон, начиная с 1. В динамических индексация начинается с 0.
Например здесь: Код:
Не важно, как часто вы падаете. Важно, как часто вы поднимаетесь. Винс Ломбарди.
Последний раз редактировалось VVM; 23.02.2009 в 01:10. |
![]() |
![]() |
![]() |
#7 |
Пользователь
Регистрация: 17.02.2008
Сообщений: 74
|
![]()
Я пытался задавать массивы с запасом (+1). Видимо не все проследил.
Просто нумерация с "1" удобна. (запись №1, ит.д.). Спасибо всем. Буду переделывать с "0" ![]() Последний раз редактировалось Andre1723; 23.02.2009 в 01:23. Причина: P.S. |
![]() |
![]() |
![]() |
#8 |
Форумчанин
Регистрация: 06.06.2007
Сообщений: 282
|
![]()
Возможно, где-то идет обращение к элементу дин. массива, размерность которого еще не задана.
Не важно, как часто вы падаете. Важно, как часто вы поднимаетесь. Винс Ломбарди.
|
![]() |
![]() |
![]() |
#9 |
Форумчанин
Регистрация: 16.12.2006
Сообщений: 859
|
![]()
Или к последнему элементу дин массива по нумерации.
например, ar[length(ar)] вызовет эту ошибку. в любом случае. |
![]() |
![]() |
![]() |
#10 |
Пользователь
Регистрация: 17.02.2008
Сообщений: 74
|
![]()
...или задана в процедуре для локальной переменной-масиву??? А в другой процедуре такая переменная будет доступна?
|
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Еще раз крестики - нолики. | Иваненко | Помощь студентам | 2 | 17.12.2007 20:09 |