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

Вниз

Помогите разобраться с поинтэрами   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.013 c
15-1234560601
Юрий
2009-02-14 00:30
2009.04.12
С днем рождения ! 14 февраля 2009 суббота


15-1234387801
Юрий
2009-02-12 00:30
2009.04.12
С днем рождения ! 12 февраля 2009 четверг


4-1208215668
KaZaK
2008-04-15 03:27
2009.04.12
WinAPI


15-1234398174
DillerXX
2009-02-12 03:22
2009.04.12
Помогите выбрать цифромыльницу по точным критериям


2-1235069146
vps
2009-02-19 21:45
2009.04.12
Out of memory,