Вниз
Скачать: 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
1-19608
_Split_
2003-03-28 20:15
2003.04.07
Эффекты при открытии формы.


1-19665
bloodman
2003-03-24 23:54
2003.04.07
Исключение неизвестное програмное исключение


6-19741
dimich1978
2003-02-13 14:17
2003.04.07
Коннект Клиент-Сервер


14-19768
GDBoy
2003-03-20 20:50
2003.04.07
Посоветуйте, плз, на каких сайтах можно найти хорошие книги...


1-19621
Asdn
2003-03-24 04:25
2003.04.07
Глюк при заполнении шаблона Word через Ole




   Наверх