Форум: "Основная";
Текущий архив: 2004.04.25;
Скачать: [xml.tar.bz2];
ВнизОсвобождение памяти, занятой динамически созданным объектом Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.032 c