Форум: "Начинающим";
Текущий архив: 2009.04.12;
Скачать: [xml.tar.bz2];
ВнизПомогите разобраться с поинтэрами Найти похожие ветки
← →
privett (2009-02-26 21:15) [0]У меня вопрос почему приват мемори моей программы разрастается при многократном кликанье по кнопке.
Я видимо не правильно работаю с указателями. прошу помочь разобраться.
И вопрос:
нужно ли GetMem(r, SizeOf(TRR)); (см. код)?
что происходит при TRR.Create ?
резервируется и заполняется место в памяти?
Тогда не нужен гетмем. Но при его убирании сыпятся другие инвалид поинтер оперейшн ошибки.
Прошу помочь понять теорию. Поискал, почитал, но вынужден обратиться. Спасибо.TCR = class
id:integer;
private
C_r: array[0..100] of ^TRR;
C_r_count: array[0..100] of integer;
CountOfC_r: integer;
public
......
procedure AddCh(Ch:Pointer; Count:integer);
end;
.... в конструкторе TCR
CountOfC_r:=0;
C_r[CountOfC_r]:=nil;
...
procedure TCR.AddCh(Ch:Pointer; Count:integer);
begin
C_r[CountOfC_r]:=Child;
C_r_count[CountOfC_r]:=Count;
Inc(CountOfC_r);
C_r[CountOfC_r]:=nil;
end;
destructor TCompoundResource.Destroy;
var
i:integer;
begin
for i:=0 to CountOfC_r-1 do FreeMem(C_r[i], SizeOf(TRR));
inherited;
end;
//---------------------
procedure TForm1.Button1Click(Sender: TObject);
var
cr:TCR;
r:^TRR;
begin
cr:=TCR.Create;
try
cr.id:=2;
...
GetMem(r, SizeOf(TRR));
r^:=TRR.Create;
r^.id:=1;
....
cr.AddCh(r,5);
finally cr.Free; end;
end;
← →
MBo © (2009-02-26 21:24) [1]что за TRR?
судя по Create - объект.
выкинь указатель на него, и вообще все, связанное с указателями.
← →
privett (2009-02-26 22:25) [2]TRR - тоже класс. Выкинуть всмысле убрать?
← →
privett (2009-02-26 22:39) [3]Подразумевалось, что
C_r: array[0..100] of ^TRR;
хранит количественно неопределенный набор объектов.
я понял про "без указателей". но в их контексте нельзя указать на ошибки?
← →
Strate (2009-02-26 22:49) [4]
> Подразумевалось, что C_r: array[0..100] of ^TRR;хранит количественно
> неопределенный набор объектов.я понял про "без указателей".
> но в их контексте нельзя указать на ошибки?
Почему просто не использоватьC_r: array[0..100] of TRR;
переменная классового типа (и результат, возвращаемый конструктором) -- это указатель на экземпляр класса. То есть, по сути своей - поинтер.
← →
Strate (2009-02-26 22:56) [5]
>C_r: array[0..100] of TRR;
Читать какC_r: array[0..100] of TObject;
← →
privett (2009-02-26 23:08) [6]Я сделал так, спасибо. Первый вопрос не снялся.
TRR = class
id: integer;
name: string;
icon: TBitmap;
public
constructor Create;
destructor Destroy; override;
end;
constructor TRR.Create;
begin
inherited Create;
icon:=TBitmap.Create;
icon:=nil;
end;
destructor TRR.Destroy;
begin
icon.Free;
inherited;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
r:TRR;
begin
r:=TRR.Create;
r.Free;
end;
нажатие на кнопку приводит к постоянному увеличению приват байтс в виртуал мемори. такого быть не должно.
← →
privett (2009-02-26 23:11) [7]все увидел где, сори за пост icon:=nil;
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2009.04.12;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.005 c