![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| RemaGe |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 89 Регистрация: 14.4.2006 Репутация: нет Всего: нет |
Доброго времени суток
Есть код
Тут создается 2 массива элементов, панели и картинки, картинки выводятся на панелях. Код работает нормально, но при завершении программы выскакивает пачка ошибок "Инструкция ххх обратилась по адресу yyyy", если убрать код создания Image, то все нормально, не могу понять почему с панелями все хорошо, а картинки тянут за собой ошибку. Пробовал сделать так
Все равно выскакивает ошибка. Если верить точкам останова - ошибка происходит после выполнения FormClose, хотя и при пустом FormClose тоже происходит. Что я делаю не так? |
||||
|
|||||
| CodeMonkey |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1839 Регистрация: 24.6.2008 Где: Россия, Тверь Репутация: 38 Всего: 89 |
Потому что отсчёт в массивах с нуля.
-------------------- Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. |
|||
|
||||
| Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 192 Всего: 484 |
||||
|
||||
| RemaGe |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 89 Регистрация: 14.4.2006 Репутация: нет Всего: нет |
CodeMonkey,
Не догнал -) Что не так? Добавлено через 4 минуты и 35 секунд Snowy,
А где же табличка "Сарказм" ? -)
Self пойдет? Попробовал nil заменить на Self и на Form1, все равно ругается -( |
||||
|
|||||
| Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 192 Всего: 484 |
Ну тут много неясностей.
Зачем создаются массивы? Зачем в массивах заполняется только последний элемент? Откуда цифра 19? Зачем нужна переменная i? Если планировалось инициировать все элементы массива под каждый контрол, то зачем перебирать контролы, если можно просто уничтожить все объекты массивов. Ну и в конце концов, зачем вообще массивы, когда проще задействовать списки для старых версий или generic для новых версий delphi... Приведённый код, хоть и компилируется, но принципиально бессмысленный. |
|||
|
||||
| RemaGe |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 89 Регистрация: 14.4.2006 Репутация: нет Всего: нет |
Snowy,
Там колличество элементов изначально неизвестно, выясняется по ходу программы, я просто лишний код с переменными убрал. "зачем вообще массивы, когда проще задействовать списки для старых версий или generic для новых версий delphi" Сел читать про дженерики -) |
|||
|
||||
| Snowy |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 192 Всего: 484 |
В качестве Owner'a вполне подойдёт панель-папа
Из-за наличия повторяющихся конструкций, код плохо читаем. При наличии неизвестного числа элементов, списки и выглядят и читаются куда лучше. Под новый элемент лучше завести переменную, а не обращаться каждый раз к массиву.
А ещё лучше
А причина скорее всего в автоуничтожении. Либо в деструкторах, либо что-то где-то некорректно привязано. Нужно либо найти что, либо уничтожить объекты по списку/массиву перед уничтожением формы. |
||||
|
|||||
| RemaGe |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 89 Регистрация: 14.4.2006 Репутация: нет Всего: нет |
Snowy,
Спасибо за помощь -) Сейчас с дженериками разберусь. потом буду с этим разбираться. |
|||
|
||||
| CodeMonkey |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1839 Регистрация: 24.6.2008 Где: Россия, Тверь Репутация: 38 Всего: 89 |
SetLength(pan_ar, ...) говорит о том, что pan_ar - динамический массив. Динамические массивы отсчитывают элементы с нуля. Т.е. если длина массива Length(pan_ar), то в нём доступны элементы с 0 по Length(pan_ar) - 1 (или, что то же самое: с Low(pan_ar) по High(pan_ar)). Вы же заполняете элементы с 1 по Length(pan_ar) - со сдвигом в 1 элемент вправо, портя, таким образом, память. Замена pan_ar[length(pan_ar)] на pan_ar[length(pan_ar) - 1] или pan_ar[High(pan_ar)] должна была решить проблему. -------------------- Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. |
|||
|
||||
| RemaGe |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 89 Регистрация: 14.4.2006 Репутация: нет Всего: нет |
CodeMonkey,
Спасибо за помощь -) Snowy, А вам за указание пути. Перевел на тлист - проблема исчезла, кода стало меньше, и он стал проще -) |
|||
|
||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |