![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
||||
|
||||
|
Код:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Memo1: TMemo;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
type
PLoadFiles = ^TLoadFiles;
TLoadFiles = record
NameFile: string;
end;
var
Form1: TForm1;
L:TList;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
p:PLoadFiles;
begin
new(p);
p.NameFile:=Memo1.Text;
l.Add(p);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
L:=TList.Create;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
L.Free;
end;вот пример добавления в TList, но вопрос когда я очищаю его или удаляю элемент, как очистить память занимаемую при создании p? |
|
#2
|
|||
|
|||
|
Dispose(P);
Как и любой указатель. Последний раз редактировалось nixel, 06.03.2012 в 19:12. |
|
#3
|
||||
|
||||
|
Код:
procedure TForm1.Button2Click(Sender: TObject); begin Dispose(L.Items[0]); l.Delete(0); end; не работает или как перейти то к нему если при создании то не работет Код:
procedure TForm1.Button1Click(Sender: TObject); var p:PLoadFiles; begin new(p); p.NameFile:=Memo1.Text; l.Add(p); Dispose(p); end; Последний раз редактировалось ALexandr555, 06.03.2012 в 19:34. |
|
#4
|
||||
|
||||
|
Код:
procedure ... var p: PLoadFiles; begin p := PLoadFiles(L.Items[0]); Dispose(p); L.Delete(0); end; |
|
#5
|
||||
|
||||
|
спасибо, вроде ок, а размерность для чего? от утечек?
|
|
#6
|
|||
|
|||
|
Цитата:
Только делать это надо в той же процедуре, где он был объявлен. Как ты написал во втором варианте в общем. =) Что конкретно не работает? Что пишет отладчик? |
|
#7
|
||||
|
||||
|
Цитата:
предложенное dr. F.I.N. работает |
|
#8
|
|||
|
|||
|
Цитата:
Впрочем, раз уже все работает, то это можно считать оффтопом) |
|
#9
|
||||
|
||||
|
Цитата:
![]() |
|
#10
|
||||
|
||||
|
вообще-то:
Код:
type
PLoadFiles = ^TLoadFiles;
TLoadFiles = record
Num: Integer;
NameFile: ShortString;
end;
var
AList: TList;
var
p: PLoadFiles;
begin
AList:=TList.Create;
New(p);
p^.Num:=0;
p^.NameFile:='hello';
AList.Add(p);
New(p);
p^.Num:=1;
p^.NameFile:='world';
AList.Add(p);
end;
begin
Dispose(PLoadFiles(AList[1]));
Dispose(PLoadFiles(AList[0]));
AList.Free;
end;
begin
Memo1.Lines.Add(IntToStr(PLoadFiles(AList[0])^.Num));
Memo1.Lines.Add(PLoadFiles(AList[0])^.NameFile);
Memo1.Lines.Add(IntToStr(PLoadFiles(AList[1])^.Num));
Memo1.Lines.Add(PLoadFiles(AList[1])^.NameFile);
end;кста, в справке по New это написано: Цитата:
Последний раз редактировалось NumLock, 07.03.2012 в 13:14. |
|
#11
|
||||
|
||||
|
у меня не работало
Код:
Dispose(AList[0]); Код:
p := PLoadFiles(L.Items[0]); Dispose(p); Код:
New(p); p^.Num:=0; p^.NameFile:='hello'; |
|
#12
|
||||
|
||||
|
Цитата:
херасе масло масляное). Таким образом, чтобы корректно освободить память надо привести указать к соответствующему типу. Т.е. Dispose(AList[0]); отработает некорректо.Ну а про p^ - я даже не глянул. Действительно, нужно работать через ^. |
|
#13
|
||||
|
||||
|
ага, про Dispose(PLoadFiles(AList[0])); я сам прозевал) т.к. писал про ^
|