Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
11-1198514617
tim128
2007-12-24 19:43
2009.04.12
Обработка событий под wince


15-1234352958
Правильный$Вася
2009-02-11 14:49
2009.04.12
как перенастроить APPDATA на другой диск?


15-1234128601
Юрий
2009-02-09 00:30
2009.04.12
С днем рождения ! 9 февраля 2009 понедельник


15-1234363562
Просто_ прохожий
2009-02-11 17:46
2009.04.12
Прерывается доступ в Internet


15-1234438591
Урсулапов_
2009-02-12 14:36
2009.04.12
Как узнать описание имени компьютера в сети?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский