Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.027 c
8-1073812295
Demian3797
2004-01-11 12:11
2004.04.25
Книга


14-1080882768
Девушка
2004-04-02 09:12
2004.04.25
Выполнено, но с ошибками на странице


7-1077879637
Ozone
2004-02-27 14:00
2004.04.25
модель материнской платы


1-1081550423
Mishenka
2004-04-10 02:40
2004.04.25
Как перевести дату и время из TDateTime в Integer и обратно?


9-1067548576
MrAngel
2003-10-31 00:16
2004.04.25
Уменьшение числа полигонов на модели




   Наверх