Главная страница
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.016 c
15-1234454090
Копир
2009-02-12 18:54
2009.04.12
Легендарный фильм "Мастер и Маргарита" 1994 г. Режиссер Юрий Кара


15-1234454770
Kerk
2009-02-12 19:06
2009.04.12
Долгосрочный научно-технологический прогноз Российской Федерации


15-1234184117
tytus
2009-02-09 15:55
2009.04.12
OCR в Delphi2009


3-1219063290
kirillrepin
2008-08-18 16:41
2009.04.12
Заполнение DBListBox при помощи StoredProc


2-1235672125
privett
2009-02-26 21:15
2009.04.12
Помогите разобраться с поинтэрами