Вниз
Скачать: 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.019 c
8-1073771619
alex-drob
2004-01-11 00:53
2004.04.25
Печать


1-1081341459
Questioner
2004-04-07 16:37
2004.04.25
Изменение стиля окна TWebBrowser..


11-1065517049
Yury Sidorov
2003-10-07 12:57
2004.04.25
Неуказанное важное изменение в KOL 1.85


1-1081571033
zsv
2004-04-10 08:23
2004.04.25
Запуск chm и hlp файлов


3-1080589165
Yozh_Programmer
2004-03-29 23:39
2004.04.25
Запись массива в бинари в blob поле в БД в MSACCESS




   Наверх