|
1 / 1 / 2
Регистрация: 08.12.2015
Сообщений: 24
|
||||||
Корректная работа с массивами компонентов (XE2)06.01.2016, 11:31. Показов 1298. Ответов 6
Метки нет (Все метки)
Здравствуйте! Есть программа, состоящая из нескольких форм. На одних формах есть массивы компонентов - таблиц StringGrid, на других формах - обработчики событий, которые обращаются к этим массивам. Программа компилируется без ошибок, запускается и работает в штатном режиме. Но при выходе вылетает ошибка - invalid pointer operation - abnormal program termination.
Опытным путём было установлено, что ошибка возникает из-за этих самых массивов. Пораскинув скудным умом новичка, я пришёл к выводу, что при завершении программы отдельные её части закрываются в определённой последовательности. И в результате одна часть программы обращается к массиву из другой части, которая уже закрыта. Попытался сделать костыли путём последовательного удаления компонентов массивов в обработчике события на выход.
. Одна часть массивов (статическая) перестала вызывать ошибку, но с динамическими массивами всё осталось по-прежнему.Не подскажете, как избавиться от этой проблемы? И вообще, как следует работать с массивами компонентов, чтобы не вылезали такие "сюрпризы"? Если не получается дать ответ навскидку, то могу привести пример. Правда, программа большая. Вряд ли кто-то захочет под утренний кофеёк перелопачивать кучу строк кода. Поэтому лучше было бы указать, какое конкретно место в программе я должен скинуть. Заранее спасибо!
0
|
||||||
| 06.01.2016, 11:31 | |
|
Ответы с готовыми решениями:
6
Корректная загрузка с помощью стандартных компонентов UIloader и List
Как всё-таки поменять цвет шрифта компонентов в Delphi XE2 |
|
34 / 34 / 21
Регистрация: 22.09.2013
Сообщений: 401
|
|
| 07.01.2016, 14:51 | |
|
Без малейшей капли кода, не понятно что у вас там делается и соотвественно как либо помочь вам не представляется возможным.
0
|
|
|
1408 / 572 / 127
Регистрация: 31.10.2011
Сообщений: 1,960
|
|
| 07.01.2016, 17:47 | |
|
как обьявлено MSG?
а вообще для хранения обьектов можно использовать TObjectList
0
|
|
|
Почетный модератор
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
|
|
| 07.01.2016, 17:51 | |
|
Enzi, покажите код... сложно подсказать, не видя кода...
0
|
|
|
1 / 1 / 2
Регистрация: 08.12.2015
Сообщений: 24
|
|
| 07.01.2016, 20:02 [ТС] | |
|
Спасибо за проявленный интерес!
В приложении к письму архив с проектом. Попробую вкратце описать ситуацию: Массивы таблиц находятся на формах Geology и Result. На форме Geology изначально присутствует одна таблица, которая является первым членом массива MSG. При нажатии на кнопки"добавить колонку" и "удалить колонку" на форме появляются и удаляются такие же таблицы, которые также объявляются членами массива. При объявлении самого массива MSG в .h файле количество его членов задаётся с запасом - 100 элементов. Ошибка возникает при создании нескольких таблиц - членов массива MSG на этой форме. Тогда при закрытии программы вылетает Abnormal program termination. Если же на форме таблица только одна, то всё закрывается нормально. На форме Result присутствует 3 массива таблиц - OR, MR, VR. Размерность каждого массива - 10, все элементы отрисовываются сразу. После создания костылей путём последовательного удаления всех элементов этих массивов в обработчике события OnClose формы DataInput ошибка в этом месте перестала возникать Работа с массивами ведётся с формы DataInput, при нажатии на кнопки "Подобрать откос" и "Результат". Ещё при нажатии на кнопки "добавить строку" и "удалить строку" меняется количество строк в таблицах на всех формах, кроме Geology. Не знаю, что ещё я могу написать. В общем, смотрите сами.
0
|
|
|
Супер-модератор
|
|||||||||||
| 07.01.2016, 20:22 | |||||||||||
Сообщение было отмечено Enzi как решение
Решение
Enzi, а с какого перепуга тебе вообще надо эти массивы удалять-то? Ты ж когда создаешь StringGrid-ы, назначаешь им владельца, вот он и позаботится о том, чтобы корректно удалить гриды при завершении самого себя (то есть, владелец сначала удалит все те объекты, которыми владеет, и только потом удалится сам...). Я уж не говорю, что
1
|
|||||||||||
|
1 / 1 / 2
Регистрация: 08.12.2015
Сообщений: 24
|
|
| 07.01.2016, 21:12 [ТС] | |
|
volvo-сенсей, здравствуй! С праздниками тебя!
Переписал все циклы с учётом индексации с 0, и всё заработало! Дурацкая ошибка, наследие старого режима... Самое смешное, что программа работала и вычисляла всё правильно. Спасибо!
0
|
|
| 07.01.2016, 21:12 | |
|
Помогаю со студенческими работами здесь
7
Не корректная работа мыши Не корректная работа Windows 7
Не корректная работа программы Не корректная работа FMX Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
|
Оттенки серого
Argus19 18.03.2026
Оттенки серого
Нашёл в интернете 3 прекрасных модуля:
Модуль класса открытия диалога открытия/ сохранения файла на Win32 API;
Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
|
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога
Финальные проекты на Си и на C++:
finish-rectangles-sdl3-c. zip
finish-rectangles-sdl3-cpp. zip
|
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие.
Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
|
|
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ВВЕДЕНИЕ
Выполняя задание на управление насосной группой заполнения резервуара,. . .
|
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
|
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога
Финальные проекты на Си и на C++:
hello-sdl3-c. zip
hello-sdl3-cpp. zip
Результат:
|
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога
MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
|