Форум: "Основная";
Текущий архив: 2003.04.07;
Скачать: [xml.tar.bz2];
Внизуказатель на структуру Найти похожие ветки
← →
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 вся ветка
Форум: "Основная";
Текущий архив: 2003.04.07;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.007 c