Вниз
Скачать: 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.013 c
3-19463
Mic_2000
2003-03-19 12:07
2003.04.07
Триггеры и обновление базы


3-19410
Askik
2003-03-17 16:48
2003.04.07
Можно ли соединить два запроса


1-19630
GrayWolf
2003-03-24 09:22
2003.04.07
Реакция на MenuItem.OnClick


4-19919
Step[B.M.]
2003-02-09 16:20
2003.04.07
Смена фокуса компонентов.


14-19812
Димаска
2003-03-19 16:07
2003.04.07
Общение в ХР по локалке




   Наверх