Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/8: Рейтинг темы: голосов - 8, средняя оценка - 4.50
 Аватар для Tree
74 / 74 / 4
Регистрация: 31.05.2009
Сообщений: 243

Ошибка при удалении динамическисозданого объекта.

10.08.2011, 19:57. Показов 1820. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вот создаю панель (TPanal) на форме и удаляю. На панели кнопка, при нажатии которой должна удалится панель с кнопкой.
Работает через раз. Скорре всего я нахимичел с ссылками.
Помогите найти ошибку.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
 
int RootCount = -1 ;
int ColButton = 0 ;
TPanel * ButtonMas[100] ;
TPanel * ButtonMasCL[100] ;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner)
{
}
//---------------------------------------------------------------------------
//Добавление панели с кнопкой
void __fastcall TForm1::Button1Click(TObject *Sender)
{
        RootCount++ ;
        ColButton++ ;
 
        ButtonMas[RootCount] = new TPanel(Form1) ;
        ButtonMas[RootCount]->Top =  8 ;
        ButtonMas[RootCount]->Left= 51*(ColButton-1)+2 ;
        ButtonMas[RootCount]->Width = 50 ;
        ButtonMas[RootCount]->Height = 29 ;
        ButtonMas[RootCount]->Parent = Form1 ;
        ButtonMas[RootCount]->Tag = RootCount ;
 
        ButtonMasCL[RootCount] = new TPanel(Form1) ;
        ButtonMasCL[RootCount]->Top =  2 ;
        ButtonMasCL[RootCount]->Left= 23 ;
        ButtonMasCL[RootCount]->Width = 25 ;
        ButtonMasCL[RootCount]->Height = 25 ;
        ButtonMasCL[RootCount]->Parent = ButtonMas[RootCount] ;
        ButtonMasCL[RootCount]->Tag = RootCount ;
        ButtonMasCL[RootCount]->OnClick = CLB ;
}
//---------------------------------------------------------------------------
// Удаление панели с кнопкой
void __fastcall TForm1::CLB(TObject *Sender)
{
 TPanel * Imag = dynamic_cast<TPanel*>(Sender) ;
 
  try {
        ButtonMas[Imag->Tag]->Free() ;
        ColButton-- ;
  }
  catch(...){ShowMessage("err") ;}
}
//---------------------------------------------------------------------------
Вот прикрепил сам проект.
Вложения
Тип файла: rar test.rar (512.6 Кб, 17 просмотров)
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
10.08.2011, 19:57
Ответы с готовыми решениями:

Ошибка при удалении объекта
Здравствуйте, создаю объекты класса и укладываю в массив. После энного времени объект должен удалиться. Код компилируется, но как только...

Ошибка при удалении объекта Клиента
Доброго времени суток, уважаемые программисты! Бьюсь с проблемой уже продолжительное время - ничего в голову не приходит.. Помогите,...

Ошибка при удалении объекта с Form
Ребят,всем халло. Такая трабла. Я пишу на паскале давно, решил заюзать Delphi XE7. Вообщем,при создании Multi-Application проекта, я не...

6
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
11.08.2011, 01:27
Думаю так подойдет?
Вложения
Тип файла: rar test 2.rar (496.4 Кб, 8 просмотров)
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
11.08.2011, 01:53
Промах
Вложения
Тип файла: rar test 2.rar (500.5 Кб, 16 просмотров)
1
 Аватар для Tree
74 / 74 / 4
Регистрация: 31.05.2009
Сообщений: 243
11.08.2011, 20:19  [ТС]
не компилится. просит DCLUSER.LIB

Добавлено через 16 минут
Цитата Сообщение от Tree Посмотреть сообщение
не компилится. просит DCLUSER.LIB
Сори. Это билдер ругался.

Проблема в другом.
Все ровно, та же ошибка - "Abstract Error"((( Попробуй сделать 10 панелей и закрыть все.
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
11.08.2011, 22:19
Конечно будет ругаться ты ж их динамически создал, а значит вручную должен их и удалить перед закрытием программы этого в коде я неувидел

А у тебя какой Builder? "Abstract Error" вылетает при закрытии приложения?

C++
1
2
3
4
5
6
7
8
void __fastcall TForm1::FormDestroy(TObject *Sender)
{
for (int i=0; i< this->ComponentCount; i++)
 {
  TPanel* Panel = dynamic_cast<TPanel*>(this->Components[i]);
  if (Panel) { delete Panel; i--;}
 }
}
0
 Аватар для Tree
74 / 74 / 4
Регистрация: 31.05.2009
Сообщений: 243
12.08.2011, 11:56  [ТС]
У меня 6 билдер. Можт быть и в этом все траблы.
ты ж их динамически создал, а значит вручную должен их и удалить
Полностью согласен. Если честно, то до этого еще руки не дошли) Ведь ругаеццо не при закрытии проги, а при закрытии самих панелек.
"Abstract Error" вылетает при закрытии приложения?
Нет, при закрытии панелек, но не всегда.
Попробуй открыть и закрыть 10 панелек в рандомном порядке. Вылетит ошибка?

Не по теме:

Кстати мне очень понравился твой метод с Tmypanel, красиво и четенько, респект)



Добавлено через 7 минут
КСТА. Ошибка "Abstract Error" начала вылетать позже, скорее всего это билдеру чет не понравилось, после переустановки. Проблема была изначально в том что когда добавляю 3 панельки и закрываю сначала вторую потом третью, то тогда вылетает ошибка. Точно не помню какая, что-то типа "за таким адресом 1х11111111 там чет не найдео..." если нужно вечером гляну.
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
12.08.2011, 22:39
Я чет тоже начудил теперь у меня тоже такаеже ерунда выскакивает Abstract Error и ошибки памяти
хотя сначала работало и твой проект кстати тожн нормально работал.
Повидимумо это связано с самим Builder -ом и наверно с настройкой пакетов.

Переустановил Builder6- непомогло. А на Builder2009 работает без проблем.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
12.08.2011, 22:39
Помогаю со студенческими работами здесь

Требуется ли при удалении объекта посредством delete указывать тип объекта?
например, есть указателиvoid *p1; void *p2; есть VCL-объект TButton, есть самописный класс TMyClass; создаются объектыp1=new...

Очистка памяти при удалении из контейнера объекта-указателя
С Наступившими всех! Подскажите пожалуйста, как очистить память на которую ссылается указатель, хранящийся в контейнере, при удалении...

Очистка памяти при удалении из QList объекта-указателя
Приветствую! Есть класс Player у которого есть свойство death. Объекты класса Player в цикле создаются динамически и их указатели...

Ошибка при удалении
Собстенно сабж. Файл viewController - (void)viewDidLoad { ; ; }

Ошибка при удалении
Всем привет! Кто-нибудь сталкивался с проблемой при удалении записи из таблицы в режиме таблицы? Ошибка &quot;ключ поиска не найден ни...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru