Вниз
Скачать: CL | DM;

указатель на структуру   Найти похожие ветки 

← →
ewgeny   (2003-03-27 10:41) [0]

есть такой вопрос, как правильно освободить память ?
см. функции: GetInfo, FreeInfo;

есть структура:

PItemRec = ^TItemRec;
TItemRec=record
i : Integer;
Name : PChar;
Desc : PChar;
end;

Есть функция, которая выделяет память и возвращает указатель на структуру.

function GetInfo( .. ) : PItemRec;
begin
New( result );
with result^ do
begin
i := random(10);
Name := StrNew(PChar(GetField("NAME").asString));
Desc := StrNew(PChar(GetField("DESC").asString))
end;
end;

правильно ли это ???

procedure FreeInfo( info : pitemrec);
begin
if info = nil then exit;
DisposeStr(info^.Name);
DisposeStr(info^.Desc);
Dispose( PitemRec(Info));
end;


← →
ewgeny   (2003-03-28 16:20) [1]

никто не ответит ?


← →
ewgeny   (2003-03-28 16:32) [2]

але ?


← →
Anatoly Podgoretsky ©   (2003-03-28 16:38) [3]

Неправильно, для info ты проверяещь на nil, а для Name и Desc нет, другое дело если бы это было StrDispose, та проверяет сама.

Но непонятнр какая нужда заставляет использовать здесь PChar, читаем справку Both DisposeStr and NewStr are obsolete.


← →
chdv   (2003-03-28 16:41) [4]

правильно


← →
Mystic ©   (2003-03-28 16:42) [5]

Вроде правильно.

Только почему PChar, а не string?
Указывать ^ при обращении к полям записи необязательно.
В чем смысл приведения PitemRec(Info), если info : pitemrec ?


← →
Mystic ©   (2003-03-28 16:50) [6]

По крайнем мере в D6:
procedure DisposeStr(P: PString);
begin
if (P <> nil) and (P^ <> "") then Dispose(P);
end;


Только NewStr соотвествует DisposeStr // Используется PString
Только StrNew соотвествует StrDispose // Используется PChar
А ты их смешал...


← →
ewgeny   (2003-03-28 16:57) [7]

PChar используется потому,что DLL


← →
ewgeny   (2003-03-28 17:00) [8]

пардон, писал прямо на форуме, конечно же пищу в программе StrDispose



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.011 c
14-19782
Satirus
2003-03-19 15:07
2003.04.07
wowexec.exe


14-19814
Товарищъ
2003-03-20 11:21
2003.04.07
Стих! (собственный:)


3-19442
Scaramanga
2003-03-18 11:16
2003.04.07
Access и Delphi


3-19492
Ej
2003-03-19 20:09
2003.04.07
SQL в консольном приложении


3-19483
Виталий Панасенко
2003-03-18 14:01
2003.04.07
FIBPlus&Exception




   Наверх