Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.04.25;
Скачать: CL | DM;

Вниз

Освобождение памяти, занятой динамически созданным объектом   Найти похожие ветки 

 
KommandorDi ©   (2004-04-05 21:26) [0]

У меня к Вам снова возник вопрос.
После создания объекта от TPointB=class(TShape) при завершении работы приложения возникает необходимостьосвобождения паямти, занятой этим объектом.
строка
Point.Free
вызывает ошибку доступа к памяти.
Подскажите, пожалуйста, как удалить созданный объект?
Заранее благодарен.


 
KommandorDi ©   (2004-04-05 21:30) [1]

Я пршу прощения за навязчивость, но с этим же объектом неожиданно выяснилась и такая проблема:
Point.Hide
тоже не работает и выдает ошиюку доступа к памяти.
ОЧень надеюсь, что Вы поможите мне разобраться!


 
ламер ©   (2004-04-05 22:00) [2]

вы расчитываете найти здесь телепатов? :) код в студию.


 
KommandorDi ©   (2004-04-05 22:05) [3]


 TPointB=class(TShape)
          protected
              LPoint:TPointLink;
              RPoint:TPointLink;
          published
            Constructor Create(AOwner:TComponent;x,y:Integer);
            procedure PointMouseDown(Sender: TObject; Button: TMouseButton;
              Shift: TShiftState; X, Y: Integer);
            procedure PointMouseMove(Sender: TObject; Shift: TShiftState; X,
              Y: Integer);
            procedure PointMouseUp(Sender: TObject; Button: TMouseButton;
              Shift: TShiftState; X, Y: Integer);
            Function GetCoord():TPoint;
        end;
Type
 TP=Array of TPointB;
Var
 Pp:TP;
...
...
Constructor TPointB.Create(AOwner:TComponent;x,y:Integer);
begin
 inherited Create(AOwner);
 Left:=x;
 Top:=y;
 Width:=10;
 Height:=10;
 Brush.Color:=clWhite;
 Shape:=stCircle;
 OnMouseDown:=PointMouseDown;
 OnMouseMove:=PointMouseMove;
 OnMouseUp:=PointMouseUp;
 LPoint:=nil;
 RPoint:=nil;
end;
...
...
Procedure CreateNewPoint(AOwner:TComponent;AWinOwner:TWinControl;CreatePoint:TPoint;var Mas:TP);
begin
 Inc(PointCount);
 SetLength(Mas,PointCount);
 Mas[PointCount-1]:=TPointB.Create(AOwner,CreatePoint.X,CreatePoint.Y);
 Mas[PointCount-1].Parent:=AWinOwner;
end;
...
...
//тут я предполагал то самое освобождение
Procedure Clear();
var
 i:Integer;
begin
 For i:=0 to PointCount-1 do
   begin
     Pp[i].Hide;
     Pp[i].Free;
   end;
 PointCount:=0;
 Pp:=nil;
end;


надеюсь в этом можно разобраться :)


 
Ломброзо ©   (2004-04-05 22:17) [4]

Подозреваю тут: PointCount - свойство или таки переменная? Если свойство - освобождайте элементы массива с конца, то бишь

For i:= PointCount-1 downto 0 do
  begin
    Pp[i].Hide;
    Pp[i].Free;
  end;


 
KommandorDi ©   (2004-04-05 22:27) [5]

спасибо - помогло!!!
Вы были правы - PointCount - общее число объектов (тут - точек на форме)
а не подскажете, почему в прямом порядке не работало???


 
Mim1   (2004-04-06 01:09) [6]

По тому что когда вы уничтожаете первый обьект, индекс последнего уменьщается на еденицу. Стандартная штука.



Страницы: 1 вся ветка

Текущий архив: 2004.04.25;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.023 c
14-1080731754
}|{yk
2004-03-31 15:15
2004.04.25
Может кто помнит как bat-файлы писать?


1-1081617900
Евгения
2004-04-10 21:25
2004.04.25
Как заставить Shape двигаться по окружности?


8-1075029267
Ig
2004-01-25 14:14
2004.04.25
Работа с Bitmap


3-1080631521
bav9
2004-03-30 11:25
2004.04.25
Использование команды Update в LocalSQL Дельфи


14-1080812408
}|{yk
2004-04-01 13:40
2004.04.25
Какой позор...